{"cells":[{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":true},"cell_type":"code","source":"\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\nimport os\nprint(os.listdir(\"../input\"))\n\nfrom collections import Counter\n\nimport matplotlib.pyplot as plt\n\nfrom sklearn.datasets import load_iris\n\nfrom imblearn.datasets import make_imbalance\nfrom imblearn.under_sampling import RandomUnderSampler\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport mlcrate as mlc\nimport os\nimport gc\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n%matplotlib inline\n\npal = sns.color_palette()\n\nprint('# File sizes')\nfor f in os.listdir('../input'):\n    if 'zip' not in f:\n        print(f.ljust(30) + str(round(os.path.getsize('../input/' + f) / 1000000, 2)) + 'MB')","execution_count":1,"outputs":[]},{"metadata":{"_cell_guid":"65b96d89-5820-4275-a2a7-a318b6246927","_uuid":"487e9509daba62b6a1e53fd1a91e378cf7f274c4","collapsed":true,"trusted":true},"cell_type":"code","source":"dtypes = {'ip': 'int32', 'app':'int16', 'device': 'int16', 'os': 'int16', 'channel': 'int16'}","execution_count":3,"outputs":[]},{"metadata":{"_cell_guid":"96e5d260-0f30-4dc2-bf95-8bf3f9885286","_uuid":"cb8c6db7d2e7040336efd295b0ed8f477f73e3f3","trusted":true},"cell_type":"code","source":"#import first 10,000,000 rows of train and all test data\ntrain = pd.read_csv('../input/train_sample.csv', parse_dates=['click_time', 'attributed_time'], \n                    dtype=dtypes)\ntest = pd.read_csv('../input/test.csv', dtype=dtypes, parse_dates=['click_time'])\n","execution_count":4,"outputs":[]},{"metadata":{"_cell_guid":"0578cad5-c96e-469a-b0dc-63c235faa872","_uuid":"2e32ef6ca0ad01f327913307e7d3f00144af3234","trusted":true},"cell_type":"code","source":"train.head()","execution_count":5,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"aa5c9f2aa046edc9af769f2e2f42ff0437bbe01d"},"cell_type":"code","source":"train.describe()","execution_count":6,"outputs":[]},{"metadata":{"_cell_guid":"2e9f0319-fcad-4009-be25-590492ab3958","_uuid":"efbb848e027f02e37f3d9ec9bf1fa0dbe308ecfc","collapsed":true,"trusted":true},"cell_type":"code","source":"from sklearn.preprocessing import scale","execution_count":7,"outputs":[]},{"metadata":{"_cell_guid":"957c7808-9c1d-43fd-aee6-94236b476648","_uuid":"6025b190d41e709708689b43f86b3110e0a5c6d4","trusted":true,"collapsed":true},"cell_type":"code","source":"y_train = train['is_attributed']\nx_train = scale(train.drop(['is_attributed', 'click_time', 'attributed_time'], axis=1))","execution_count":8,"outputs":[]},{"metadata":{"_cell_guid":"6539094d-d29c-426f-9c05-aad22259eba2","_uuid":"43d838f1a9dd4644b48596cf836df509a1fae7eb","collapsed":true,"trusted":true},"cell_type":"code","source":"from imblearn.ensemble import BalancedBaggingClassifier\nfrom imblearn.metrics import classification_report_imbalanced\nfrom collections import Counter","execution_count":9,"outputs":[]},{"metadata":{"_cell_guid":"f8610869-60b6-4c66-bfda-ba937ef4e5cf","_uuid":"969311144249f837a07ff38cb60e388ad189404e","trusted":true},"cell_type":"code","source":"print(\"Training class distribution summary: {}\".format(Counter(y_train)))","execution_count":10,"outputs":[]},{"metadata":{"_cell_guid":"6954608b-1c72-4202-8b01-d7f21eec6992","_uuid":"251af5795866004f096e80d056c6583d5fd1c36b","collapsed":true,"trusted":true},"cell_type":"code","source":"from scipy import interp \nfrom sklearn.metrics import auc, roc_curve\nfrom sklearn.model_selection import StratifiedKFold\nfrom sklearn.neural_network import MLPClassifier\nfrom sklearn.ensemble import (RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier, ExtraTreesClassifier,\n                              BaggingClassifier, VotingClassifier)\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom imblearn.over_sampling import ADASYN, SMOTE, RandomOverSampler\nfrom imblearn.pipeline import make_pipeline","execution_count":11,"outputs":[]},{"metadata":{"_cell_guid":"65cb8d5b-2d4e-410e-ae76-161b5eaa9908","_uuid":"a92a2c02cd0d3a8f40cfd99760cded1b871e0a16","collapsed":true,"trusted":true},"cell_type":"code","source":"LW = 2\nRANDOM_STATE = 42","execution_count":12,"outputs":[]},{"metadata":{"_cell_guid":"186d0727-b916-4c5e-b80b-b3e72d93aec5","_uuid":"201fd883494bab34e0b657bd25bf41921338867c","collapsed":true,"trusted":true},"cell_type":"code","source":"cv = StratifiedKFold(n_splits=2)","execution_count":13,"outputs":[]},{"metadata":{"_cell_guid":"ef9f55e8-0f84-4e09-a457-93a51ced981d","_uuid":"ebd904175ad473dab824cdb6c9a8b6979c524e2c","collapsed":true,"trusted":true},"cell_type":"code","source":"# Kneighbor parameterers\nkn_params = {'n_neighbors': 5, 'n_jobs': -1}\n\nmlp_params = {'alpha': 1}\n\nrf_params = {\n    'n_jobs': -1,\n    'n_estimators': 100,\n    'max_depth': 6,\n    'min_samples_leaf': 2,\n    'max_features': 'sqrt',\n    'verbose': 0\n}\n\net_params = {\n    'n_jobs': -1,\n    'n_estimators': 100,\n    'max_depth': 6,\n    'min_samples_leaf': 2,\n    'verbose': 0\n}\n\nada_params = {'n_estimators': 100, 'learning_rate': 0.75}\n\ngb_params = {\n    'n_estimators': 100,\n    'max_depth': 5,\n    'min_samples_leaf': 2,\n    'verbose': 0\n}","execution_count":14,"outputs":[]},{"metadata":{"_cell_guid":"09aadfa7-6cbb-4c96-b4a0-8a8330446c54","_uuid":"291ef13b1889975a08a4d61ea4c01aafeabb8d3d","collapsed":true,"trusted":true},"cell_type":"code","source":"classifiers = [\n    ('5NN', KNeighborsClassifier(**kn_params)), \n    ('Bagging', BaggingClassifier()),\n    ('MLP', MLPClassifier(**mlp_params)),\n    ('forest', RandomForestClassifier(**rf_params)),\n    ('extra_trees', ExtraTreesClassifier(**et_params)),\n    ('adaboost', AdaBoostClassifier(**ada_params)),\n    ('gboost', GradientBoostingClassifier(**gb_params))\n]","execution_count":15,"outputs":[]},{"metadata":{"_cell_guid":"af2cc595-121f-4845-94b6-8902cb753e09","_uuid":"06573c1cf49ce62c0c35736daa591c23a48d52c4","collapsed":true,"trusted":true},"cell_type":"code","source":"samplers = [['ADASYN', ADASYN(random_state=RANDOM_STATE, n_jobs=-1, n_neighbors=5)]]","execution_count":16,"outputs":[]},{"metadata":{"_cell_guid":"b46937d4-dbbc-4f98-8c94-935d59fde713","_uuid":"f4652f6b1347a5f0f3ab3765e02279ef8d02ded9","trusted":true},"cell_type":"code","source":"pipelines = [[\n    '{}-{}'.format(sampler[0], classifier[0]),\n    make_pipeline(sampler[1], classifier[1])\n] for sampler in samplers for classifier in classifiers]\npipelines","execution_count":17,"outputs":[]},{"metadata":{"_cell_guid":"09b62ab7-c43e-4bdf-ab52-1db01572730f","_uuid":"b76c0ce37f5413668c44de8472add3243798b4ed","collapsed":true,"trusted":true},"cell_type":"code","source":"from time import time","execution_count":18,"outputs":[]},{"metadata":{"_cell_guid":"8a864107-68a7-4ceb-86a5-2d96837372e2","_uuid":"2d79a56f2c32f2b7b602506e45da4ce857ebf45e","trusted":true},"cell_type":"code","source":"%%time \nfig = plt.figure(figsize=(14, 10))\nax = fig.add_subplot(1, 1, 1)\n\nfor name, pipeline in pipelines:\n    start = time()\n    mean_tpr  = 0.0\n    mean_fpr = np.linspace(0, 1, 100)\n    for train, test in cv.split(x_train, y_train):\n        probas_ = pipeline.fit(x_train[train], y_train[train]).predict_proba(x_train[test])\n        fpr, tpr, thresholds = roc_curve(y_train[test], probas_[:, 1])\n        mean_tpr += interp(mean_fpr, fpr, tpr)\n        mean_tpr[0] = 0.0\n        roc_auc = auc(fpr, tpr)\n        \n        \n    mean_tpr /= cv.get_n_splits(x_train, y_train)\n    mean_tpr[-1] = 1.0\n    mean_auc = auc(mean_fpr, mean_tpr)\n    plt.plot(mean_fpr, mean_tpr, linestyle='--', label='{} (area = %0.2f)'.format(name) % mean_auc, lw=LW)\n    total_time = time() - start\n    print('{} took {} seconds'.format(name, total_time))\n    \n    \nplt.plot([0, 1], [0, 1], linestyle='--', lw=LW, color='k', label='Luck')\n\n# Make nice plotting\nax.spines['top'].set_visible(False)\nax.spines['right'].set_visible(False)\nax.get_xaxis().tick_bottom()\nax.get_yaxis().tick_left()\nax.spines['left'].set_position('center')\nax.spines['bottom'].set_position('center')\nplt.xlim([0, 1])\nplt.ylim([0, 1])\nplt.xlabel('False Positive Rate')\nplt.ylabel('True Positive Rate')\nplt.title('Receiver Operating Characteristic')\nplt.legend(loc='lower right')\nplt.show()","execution_count":21,"outputs":[]},{"metadata":{"_cell_guid":"a6d0408e-ec2e-4bc7-9aeb-0a78a9b872c1","_uuid":"178a50457577599137a5d75f06e862843f1e9de7","collapsed":true,"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"ea3a3267-0999-498b-aa44-0a489c04fcbd","_uuid":"e9fd38b983809323d89e1cc540eada45a85d89a1","collapsed":true,"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":1}