{"cells":[{"metadata":{"_uuid":"f9b30b4127c26e7784de7882f5c9b22d7884ddb6"},"cell_type":"markdown","source":"- First things first, Random Forest model just hardly fits this TalkingData competiton with its execution time and memory usage. \n- If you are looking for high scoring models, try research on LGB or XGB models. \n- I make this simply because I love Random Forest, it is straight forward and easy to understand, you can read more from following link:\nhttp://www.codeastar.com/random-random-forest-tutorial/"},{"metadata":{"trusted":true,"_uuid":"688878a9ad06989ef731963200422dbf7535138e"},"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport gc, time\nimport os\n\nprint(os.listdir(\"../input\"))","execution_count":2,"outputs":[]},{"metadata":{"collapsed":true,"trusted":true,"_uuid":"659a52da736058373d1c4b9312fbb847bfa002d7"},"cell_type":"code","source":"dtypes = {\n    'ip'            : 'uint32',\n    'app'           : 'uint16',\n    'device'        : 'uint16',\n    'os'            : 'uint16',\n    'channel'       : 'uint16',\n    'is_attributed' : 'uint8',\n    'click_id'      : 'uint32'\n}","execution_count":3,"outputs":[]},{"metadata":{"collapsed":true,"trusted":true,"_uuid":"45568d64f8858f1eb60bb4fed8344abfe13f7a5e"},"cell_type":"code","source":"def handleClickHour(df):\n    df['click_hour']= (pd.to_datetime(df['click_time']).dt.round('H')).dt.hour\n    df['click_hour'] = df['click_hour'].astype('uint16')\n    df = df.drop(['click_time'], axis=1)   \n    return df","execution_count":4,"outputs":[]},{"metadata":{"nbpresent":{"id":"d7d4115d-9349-4704-b164-c76c196ded8e"},"trusted":false,"_uuid":"1ac3555d0b339db5f68e31d74cac26f731708db0"},"cell_type":"code","source":"def prepare_data():\n    train_columns = ['ip', 'app', 'device', 'os', 'channel', 'click_time', 'is_attributed']\n\n    #load training df (partly)\n    start_time = time.time()\n    df_train_30m = pd.read_csv('../input/train.csv', dtype=dtypes, skiprows=range(1,133333333), nrows=33333333, usecols=train_columns)\n    print('Load df_train_30m with [{}] seconds'.format(time.time() - start_time))\n\n    # Load testing df\n    start_time = time.time()\n    df_test = pd.read_csv('../input/test.csv', dtype=dtypes)\n    print('Load df_test with [{}] seconds'.format(time.time() - start_time))\n\n    train_record_index = df_train_30m.shape[0]\n\n    #handle click hour \n    df_train_30m = handleClickHour(df_train_30m)\n    df_test = handleClickHour(df_test)\n    gc.collect()\n\n    #df for submit\n    df_submit = pd.DataFrame()\n    df_submit['click_id'] = df_test['click_id']\n\n    Learning_Y = df_train_30m['is_attributed']\n\n    #drop zone\n    df_test = df_test.drop(['click_id'], axis=1)\n    df_train_30m = df_train_30m.drop(['is_attributed'], axis=1)\n    gc.collect()\n\n    df_merge = pd.concat([df_train_30m, df_test])\n    del df_train_30m, df_test\n    gc.collect()\n\n    # Count ip for both train and test df \n    start_time = time.time()\n    df_ip_count = df_merge['ip'].value_counts().reset_index(name='ip_count')\n    df_ip_count.columns = ['ip', 'ip_count']\n    print('Load df_ip_count with [{}] seconds'.format(time.time() - start_time))\n\n    df_merge = df_merge.merge(df_ip_count, on='ip', how='left', sort=False)\n    df_merge['ip_count'] = df_merge['ip_count'].astype('uint16')\n\n    df_merge = df_merge.drop(['ip'], axis=1)\n    del df_ip_count\n    gc.collect()\n\n    df_train = df_merge[:train_record_index]\n    df_test = df_merge[train_record_index:]\n\n    del df_merge\n    gc.collect()","execution_count":20,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"7319b287e3607720e867a1aa2464fcbea4922de6"},"cell_type":"code","source":"def train_forest():\n    #Use RandomForest\n    from sklearn.ensemble import RandomForestClassifier\n\n    start_time = time.time()\n    rf = RandomForestClassifier(n_estimators=13, max_depth=13, random_state=13,verbose=2)\n    rf.fit(df_train, Learning_Y)\n    pickle.dump(rf, open( \"rf.p\", \"wb\"))\n    print('Train RandomForest df_train_30m with [{}] seconds'.format(time.time() - start_time))\n\n    #predict\n    start_time = time.time()\n    predictions = rf.predict_proba(df_test)\n    print('Predict RandomForest df_train_22m with [{}] seconds'.format(time.time() - start_time))\n\n    df_submit['is_attributed'] = predictions[:,1]\n    df_submit.describe()\n\n    df_submit.to_csv('random_forest_talking_data.csv', index=False)","execution_count":27,"outputs":[]},{"metadata":{"collapsed":true,"trusted":false,"_uuid":"a9f097e402f756dc8573d4968bd4580c28f960ad"},"cell_type":"code","source":"import pickle\n\ndef load_forest():\n    return pickle.load(open(\"rf.p\", \"rb\"))    ","execution_count":28,"outputs":[]},{"metadata":{"collapsed":true,"trusted":false,"_uuid":"8090166234cbed695a1c989b21789192a5ba7993"},"cell_type":"code","source":"import os.path\n\nif os.path.isfile(\"rf.p\"):\n    rf = load_forest()\nelse:\n    prepare_data()\n    rf = train_forest()","execution_count":32,"outputs":[]},{"metadata":{"collapsed":true,"trusted":false,"_uuid":"fb84bce3de8d0667c22c904876d7205285248b53"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"anaconda-cloud":{},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":2},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython2","version":"2.7.12"},"nbpresent":{"slides":{"0d4d2497-917d-4c39-9f5b-0d8eeff60668":{"id":"0d4d2497-917d-4c39-9f5b-0d8eeff60668","prev":null,"regions":{"9c0047d7-2893-403d-bcc9-40c455fcc348":{"attrs":{"height":0.8,"width":0.8,"x":0.1,"y":0.1},"content":{"cell":"d7d4115d-9349-4704-b164-c76c196ded8e","part":"whole"},"id":"9c0047d7-2893-403d-bcc9-40c455fcc348"}}},"b87240f6-1f71-4dfc-b322-1596fa3a668c":{"id":"b87240f6-1f71-4dfc-b322-1596fa3a668c","prev":"0d4d2497-917d-4c39-9f5b-0d8eeff60668","regions":{"074cfbbc-31f4-42b6-8b61-eea2d646b865":{"attrs":{"height":0.8,"width":0.8,"x":0.1,"y":0.1},"content":{"cell":"c827cdb8-1470-47c6-8736-1ccd1b4df72b","part":"whole"},"id":"074cfbbc-31f4-42b6-8b61-eea2d646b865"}},"theme":null}},"themes":{}}},"nbformat":4,"nbformat_minor":1}