{"cells":[{"metadata":{"_cell_guid":"97335584-0d54-4278-bdfa-175180da0356","collapsed":true,"_uuid":"ebdf5590e989d499cbbfeb25b0c3b200c0590730","trusted":false},"cell_type":"code","source":"# Thanks to the1owl for the data reading code, https://www.kaggle.com/the1owl/regressing-during-insomnia-0-21496","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","collapsed":true,"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":false},"cell_type":"code","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\nimport numpy as np # linear algebra\nimport 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\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","collapsed":true,"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":false},"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler,MinMaxScaler\nfrom sklearn.svm import OneClassSVM\nimport collections\n\n# For plotting\n%matplotlib inline\nimport matplotlib.pyplot as plt\n\nfrom sklearn.metrics import (confusion_matrix, precision_recall_curve, auc,\n                             roc_curve, recall_score, classification_report, f1_score,\n                             precision_recall_fscore_support)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"7ef51103-8ae5-4c6b-9f24-596934e56270","collapsed":true,"_uuid":"5513c5792d7fc200327e4b9b84e7052659733902","trusted":false},"cell_type":"code","source":"train = pd.read_csv('../input/train.csv')\ntrain = pd.concat((train, pd.read_csv('../input/train_v2.csv')),axis=0, ignore_index=True).reset_index(drop=True)\ntest = pd.read_csv('../input/sample_submission_v2.csv')","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"9e89e909-5ca9-47a2-85fd-18c369a668c1","collapsed":true,"_uuid":"6d0044b49ddef499e01145cb08371ba98f94eaa2","trusted":false},"cell_type":"code","source":"transactions = pd.read_csv('../input/transactions.csv', usecols=['msno'])\ntransactions = pd.concat((transactions, pd.read_csv('../input/transactions_v2.csv', usecols=['msno'])), axis=0, ignore_index=True).reset_index(drop=True)\ntransactions = pd.DataFrame(transactions['msno'].value_counts().reset_index())\ntransactions.columns = ['msno','trans_count']\ntrain = pd.merge(train, transactions, how='left', on='msno')\ntest = pd.merge(test, transactions, how='left', on='msno')","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"efae43f8-d112-4812-9ba7-2391f17252bf","collapsed":true,"_uuid":"00117f08634a927aa560fc12a27307bac76af446","trusted":false},"cell_type":"code","source":"transactions = pd.read_csv('../input/transactions_v2.csv') \ntransactions = transactions.sort_values(by=['transaction_date'], ascending=[False]).reset_index(drop=True)\ntransactions = transactions.drop_duplicates(subset=['msno'], keep='first')\n\ntrain = pd.merge(train, transactions, how='left', on='msno')\ntest = pd.merge(test, transactions, how='left', on='msno')\ntransactions=[]","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"c7b79b89-a282-4287-9a14-ca10fd3485ef","collapsed":true,"_uuid":"9acb79bd8df7f424732634aea5b4d54597f25ac5","trusted":false},"cell_type":"code","source":"user_logs = pd.read_csv('../input/user_logs_v2.csv', usecols=['msno'])\nuser_logs = pd.DataFrame(user_logs['msno'].value_counts().reset_index())\nuser_logs.columns = ['msno','logs_count']\ntrain = pd.merge(train, user_logs, how='left', on='msno')\ntest = pd.merge(test, user_logs, how='left', on='msno')\n\nuser_logs = []; ","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"64e0de55-ffa6-4c66-b600-5b6778240bbc","collapsed":true,"_uuid":"9587455a985c23bdd2dd19c2a7a702c09ea9e0c1","trusted":false},"cell_type":"code","source":"def transform_df(df):\n    df = pd.DataFrame(df)\n    df = df.sort_values(by=['date'], ascending=[False])\n    df = df.reset_index(drop=True)\n    df = df.drop_duplicates(subset=['msno'], keep='first')\n    return df\n\ndef transform_df2(df):\n    df = df.sort_values(by=['date'], ascending=[False])\n    df = df.reset_index(drop=True)\n    df = df.drop_duplicates(subset=['msno'], keep='first')\n    return df","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"a5fbe58b-d3a3-4c52-9343-34260e376237","collapsed":true,"_uuid":"2b0de1dbb2fa02a4eb8c3fb4a7cb9409c9e33c6c","trusted":false},"cell_type":"code","source":"last_user_logs = []\nlast_user_logs.append(transform_df(pd.read_csv('../input/user_logs_v2.csv')))\nlast_user_logs = pd.concat(last_user_logs, axis=0, ignore_index=True).reset_index(drop=True)\nlast_user_logs = transform_df2(last_user_logs)\nprint ('merging user logs features...')\ntrain = pd.merge(train, last_user_logs, how='left', on='msno')\ntest = pd.merge(test, last_user_logs, how='left', on='msno')\nlast_user_logs=[]","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"bd2b7513-f635-453f-b511-4d05728fb540","collapsed":true,"_uuid":"9e42b632c15dc11ed0836b68460f45d3d05dbefd","trusted":false},"cell_type":"code","source":"members = pd.read_csv('../input/members_v3.csv')\ntrain = pd.merge(train, members, how='left', on='msno')\ntest = pd.merge(test, members, how='left', on='msno')\nmembers = []; print('members merge...') ","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"e940b737-7d73-46ba-8a5d-684e0c06eed6","collapsed":true,"_uuid":"37c3d6664fec79a304b98ba7e5d9eab48e01be53","trusted":false},"cell_type":"code","source":"gender = {'male':1, 'female':2}\ntrain['gender'] = train['gender'].map(gender)\ntest['gender'] = test['gender'].map(gender)\n\ntrain = train.fillna(0)\ntest = test.fillna(0)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"25ae4c40-adf1-4d85-b448-18df17b885a6","collapsed":true,"_uuid":"bba26b1cfef058419dca4e5a733f58f606227c17","trusted":false},"cell_type":"code","source":"train = train.fillna(0)\ntest = test.fillna(0)\ntrain.head()","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"31be5327-a1d8-411f-98d7-7831546efc76","_uuid":"abf1326578f2c8de075c1cc00e2a351cdf8d44f5"},"cell_type":"markdown","source":"# Simple Deep Learning: Feedforward Neural Network¶"},{"metadata":{"_cell_guid":"43171993-dcb5-47dc-ad1e-fddc74abb6f1","collapsed":true,"_uuid":"babacf597741b53ed8550d6fb4ae15ff45aa986e","trusted":false},"cell_type":"code","source":"# For Keras\nfrom keras.models import Sequential\nfrom keras.callbacks import ReduceLROnPlateau\nfrom keras.callbacks import LambdaCallback\nfrom keras.layers.normalization import BatchNormalization\nfrom keras.optimizers import SGD\nfrom keras.constraints import maxnorm\nfrom keras.callbacks import EarlyStopping, ModelCheckpoint\nfrom keras.utils import np_utils\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Lambda\nfrom keras.layers.core import Dropout\nfrom keras import regularizers\nfrom keras.models import Model, load_model\nfrom keras.preprocessing import sequence\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Activation\nfrom keras.layers import Embedding\nfrom keras.layers import Conv1D, GlobalMaxPooling1D\nfrom keras.datasets import imdb\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Activation, MaxPooling1D\n","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"daa3dacf-73c1-4d13-ad07-370200ef6d47","collapsed":true,"_uuid":"0849569a855b0d936c4c248d9c17cb9a6535f18c","trusted":false},"cell_type":"code","source":"cols = [c for c in train.columns if c not in ['is_churn','msno']]\n\nX_train = StandardScaler().fit_transform(train[cols].as_matrix())\ny_train = train['is_churn'].as_matrix()\nX_test = StandardScaler().fit_transform(test[cols].as_matrix())","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"6f4bbe32-a166-4088-a4c6-2f1ea8bd9fe1","collapsed":true,"_uuid":"7ec2742b0e09fedfbc6c079a5573fba68970c958","trusted":false},"cell_type":"code","source":"lsize = 128\nmodel = Sequential()\nmodel.add(Dense(lsize, input_dim=int(X_train.shape[1]),activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(rate=0.25))\nmodel.add(Dense(int(lsize/2), activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(rate=0.25))\nmodel.add(Dense(int(lsize/4),kernel_regularizer=regularizers.l2(0.1), activation='relu'))\nmodel.add(Dropout(rate=0.1))\nmodel.add(Dense(1, activation='sigmoid'))\n\n# Compile model\nmodel.compile(loss='binary_crossentropy', optimizer='adadelta', metrics=['accuracy'])\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"dd8eea27-ad90-40a9-a893-b7f59bce4a91","collapsed":true,"_uuid":"25bc9d40e37156c64f89d8dabaccd3b5f3f46108","trusted":false},"cell_type":"code","source":"# Fit the model\nhistory = model.fit(X_train, y_train, epochs=10, batch_size=1026,#512, \n                    validation_split=0.2, verbose=1)\n                    ","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"85bb43fb-83bd-4112-896a-149162f5691a","collapsed":true,"_uuid":"4feb0e34695e8f4e104469fbf3564e5dfc8230af","trusted":false},"cell_type":"code","source":"predictions = model.predict(X_test)\ntest['is_churn'] = predictions.clip(0.+1e-15, 1-1e-15)\ntest[['msno','is_churn']].to_csv('submission_NN.csv', index=False)","execution_count":null,"outputs":[]}],"metadata":{"language_info":{"codemirror_mode":{"version":3,"name":"ipython"},"pygments_lexer":"ipython3","name":"python","nbconvert_exporter":"python","version":"3.6.4","mimetype":"text/x-python","file_extension":".py"},"kernelspec":{"display_name":"Python 3","name":"python3","language":"python"}},"nbformat":4,"nbformat_minor":1}