{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "f4436b18-c81c-7220-bfa2-b13f5ad720ef"
      },
      "source": [
        ""
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "1e53a473-4e66-ba08-7063-4d21091fe337"
      },
      "outputs": [],
      "source": [
        "# This Python 3 environment comes with many helpful analytics libraries installed\n",
        "# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n",
        "# For example, here's several helpful packages to load in \n",
        "\n",
        "import numpy as np # linear algebra\n",
        "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n",
        "\n",
        "# Input data files are available in the \"../input/\" directory.\n",
        "# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n",
        "\n",
        "from subprocess import check_output\n",
        "print(check_output([\"ls\", \"../input\"]).decode(\"utf8\"))\n",
        "\n",
        "clicks_train = pd.read_csv(\"../input/clicks_train.csv\")\n",
        "#clicks_test = pd.read_csv(\"../input/clicks_test.csv\")\n",
        "# documents_categories = pd.read_csv(\"../input/documents_categories.csv\")\n",
        "# documents_entities  = pd.read_csv(\"../input/documents_entities.csv\")\n",
        "# documents_meta = pd.read_csv(\"../input/documents_meta.csv\")\n",
        "# documents_topics = pd.read_csv(\"../input/documents_topics.csv\")\n",
        "# events = pd.read_csv(\"../input/events.csv\")\n",
        "# page_views_sample = pd.read_csv(\"../input/page_views_sample.csv\")\n",
        "# promoted_content = pd.read_csv(\"../input/promoted_content.csv\")\n",
        "sample_submission = pd.read_csv(\"../input/sample_submission.csv\")\n",
        "\n",
        "# Any results you write to the current directory are saved as output."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "f5b43e4b-4c9e-7d5f-598a-6eff9c152ccf"
      },
      "outputs": [],
      "source": [
        "clicks_train.head()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "5417072a-8daa-b77a-54fa-9a71884e43b8"
      },
      "outputs": [],
      "source": [
        "# Get Training and Testing Sets\n",
        "ids = clicks_train.display_id.unique()\n",
        "ids = np.random.choice(ids, size=len(ids)//10, replace=False)\n",
        "valid = clicks_train[clicks_train.display_id.isin(ids)]\n",
        "train = clicks_train[~clicks_train.display_id.isin(ids)]\n",
        "print(valid.shape, train.shape)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "65840160-821e-0aee-c294-ba6b23726a1c"
      },
      "outputs": [],
      "source": [
        "# Initialize Things\n",
        "reg = 10\n",
        "count = train[train.clicked==1].ad_id.value_counts()\n",
        "count_all = train.ad_id.value_counts()\n",
        "del train"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "ae51e503-e1d5-06ab-5b53-ef45b5fe1728"
      },
      "outputs": [],
      "source": [
        "# functions\n",
        "def get_prob(k):\n",
        "    if k not in count:\n",
        "        return 0\n",
        "    # Notice the regularization parameter\n",
        "    return float(count[k])/(float(count_all[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": "868d1e73-7bbc-308f-e0a0-15ca96be6d36"
      },
      "outputs": [],
      "source": [
        "# If Evaluation Stage\n",
        "Eval = False\n",
        "if Eval = True\n",
        "    from ml_metrics import mapk\n",
        "\n",
        "    y = valid[valid.clicked == 1].ad_id.values\n",
        "    y = [[_] for _ in y]\n",
        "    p = valid.groupby('display_id').ad_id.apply(list)\n",
        "    p = [sorted(x, key=get_prob, reverse=True) for x in p]\n",
        "\n",
        "    print (mapk(y, p, k=12))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "2855d002-f074-7487-2dc5-d167f5847e94"
      },
      "outputs": [],
      "source": [
        "## If you want to submit\n",
        "sample_submission['ad_id'] = sample_submission.ad_id.apply(lambda x: srt(x))\n",
        "sample_submission.to_csv(\"subm_reg_1.csv\", index = False)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "09f6010e-d801-804f-369a-1515422f1d19"
      },
      "outputs": [],
      "source": ""
    }
  ],
  "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
}