{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "0bd0aefa-2a44-884f-68ed-c89302787548"
      },
      "outputs": [],
      "source": [
        "def get_prob(k):\n",
        "    if k not in cnt:\n",
        "        return 0\n",
        "    return cnt[k]/(float(cntall[k]) + reg)\n",
        "\n",
        "def srt(x):\n",
        "    ad_ids = map(int, x.split())\n",
        "    ad_ids = sorted(ad_ids, key=get_prob, reverse=True)\n",
        "    return \" \".join(map(str,ad_ids))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "92c82f1d-aa5c-667d-7e96-364d55b3b18c"
      },
      "outputs": [],
      "source": [
        "import pandas as pd\n",
        "import numpy as np \n",
        "\n",
        "reg = 10 # trying anokas idea of regularization\n",
        "eval = True\n",
        "\n",
        "train = pd.read_csv(\"../input/clicks_train.csv\")\n",
        "\n",
        "if eval:\n",
        "\tids = train.display_id.unique()\n",
        "\tids = np.random.choice(ids, size=len(ids)//10, replace=False)\n",
        "\n",
        "\tvalid = train[train.display_id.isin(ids)]\n",
        "\ttrain = train[~train.display_id.isin(ids)]\n",
        "\t\n",
        "\tprint (valid.shape, train.shape)\n",
        "valid = valid[:100]\n",
        "train = train[train.clicked==1][:1000]\n",
        "print (valid.shape, train.shape)\n",
        "cnt = train[train.clicked==1].ad_id.value_counts()\n",
        "cntall = train.ad_id.value_counts()\n",
        "#del train"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "d9a58875-f886-0c46-d89d-738499aeae5c"
      },
      "outputs": [],
      "source": [
        "p = train.display_id.unique()\n",
        "print(p)\n",
        "\n",
        "print(train.display_id)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "da6cd6bf-c043-1587-3934-456649f5eea5"
      },
      "outputs": [],
      "source": [
        "events = pd.read_csv(\"../input/events.csv\")\n",
        "events = events[events.display_id.isin(p)]\n",
        "\n",
        "print(events)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "f3fc5c61-d3d7-081c-416a-2937d2a433e2"
      },
      "outputs": [],
      "source": [
        "if eval:\n",
        "\tfrom ml_metrics import mapk\n",
        "\t\n",
        "\ty = valid[valid.clicked==1].ad_id.values\n",
        "\ty = [[_] for _ in y]\n",
        "\tp = valid.groupby('display_id').ad_id.apply(list)\n",
        "\tp = [sorted(x, key=get_prob, reverse=True) for x in p]\n",
        "\t\n",
        "\tprint (mapk(y, p, k=12))\n",
        "else:\n",
        "\tsubm = pd.read_csv(\"../input/sample_submission.csv\") \n",
        "\tsubm['ad_id'] = subm.ad_id.apply(lambda x: srt(x))\n",
        "\tsubm.to_csv(\"subm_reg_1.csv\", index=False)"
      ]
    }
  ],
  "metadata": {
    "_change_revision": 0,
    "_is_fork": false,
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.5.2"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}