{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport os\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport numpy as np\nimport datetime\nimport time\nimport lightgbm as lgb\nfrom sklearn.model_selection import StratifiedKFold, KFold\nfrom sklearn.metrics import mean_squared_error\nfrom sklearn.metrics import log_loss","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"os.getcwd()\ntrain=pd.read_csv('../input/train.csv')\ntest=pd.read_csv('../input/test.csv')\nhist=pd.read_csv('../input/historical_transactions.csv')\nnew=pd.read_csv('../input/new_merchant_transactions.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"040e102f83abd1f8d317d5fb5e993764e9cff4ae"},"cell_type":"code","source":"#查看hist表中的category_1这个变量的类型有哪些，以便查看数据却缺失值及分布\nhist['category_1'].describe()\nhist['category_2'].dtype\nhist['category_2'].describe()#有缺失值\nhist['category_3'].describe()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b3f656149b17042c13fc66fe2b948fd3e2621659"},"cell_type":"code","source":"hist['category_1'].value_counts()\ntemp=hist['category_2'].value_counts()\ndf = pd.DataFrame({'labels': temp.index,\n                   'values': temp.values\n                  })\nplt.figure(figsize = (6,6))\nsns.set_color_codes(\"pastel\")\nsns.barplot(x = 'labels', y=\"values\", data=df)\nlocs, labels = plt.xticks()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3d3304d05c2d8b2ec2291df72b41162fef79b26a"},"cell_type":"code","source":"#缺失值处理\nfor df in [hist,new]:\n    df['category_2'].fillna(1.0,inplace=True)\n    df['category_3'].fillna('A', inplace=True)\n    df['merchant_id'].fillna('M_ID_00a6ca8a8a', inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a040cdda0a12e7fed06f62fb5a107320655b94ab"},"cell_type":"code","source":"#特征值探索\n#分类变量处理\nhist.info()\nhist = pd.get_dummies(hist, columns=['category_2', 'category_3'])\nnew=pd.get_dummies(new,columns=['category_2', 'category_3'])\ndef binarize(df):\n    for col in ['category_1','authorized_flag']:\n        df[col]=df[col].map({'Y':1,'N':0})\n    return df\nhist=binarize(hist)\nnew=binarize(new)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1a340fb88bbc730299a59c732f943499b7c2d47d"},"cell_type":"code","source":"def aggregate_data(df,prefix):\n    df['purchase_date']=pd.DatetimeIndex(df['purchase_date']).astype(np.int64) * 1e-9\n    agg_fun={'authorized_flag':['sum','mean'],\n             'category_1':['sum','mean'],\n             'category_2_1.0':['sum','mean'],\n             'category_2_2.0': ['sum', 'mean'],\n             'category_2_3.0': ['sum', 'mean'],\n             'category_2_4.0': ['sum', 'mean'],\n             'category_2_5.0': ['sum', 'mean'],\n             'category_3_A': ['sum', 'mean'],\n             'category_3_B': ['sum', 'mean'],\n             'category_3_C': ['sum', 'mean'],\n             'merchant_id': ['nunique'],\n             'merchant_category_id':['nunique'],\n             'state_id': ['nunique'],\n             'city_id': ['nunique'],\n             'purchase_date': [np.ptp],\n             'purchase_amount': ['sum', 'mean', 'max', 'min', 'std'],\n             'installments': ['sum', 'mean', 'max', 'min', 'std'],\n             'month_lag': ['mean','min','max']\n             }\n    agg_trans=df.groupby('card_id').agg(agg_fun)\n    agg_trans.columns=[prefix+'_'.join(col).strip() for col in agg_trans.columns.values]\n    agg_trans.reset_index(inplace=True)\n    return agg_trans\nhist1=aggregate_data(hist,'hist_')\nnew1=aggregate_data(new,'new_')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"39d29380bb8c37b17d3aede81a6745de5f827109"},"cell_type":"code","source":"# hist['card_id'].dtype\n# hist['category_3_A'].dtype\n#生成训练集和测试集\ntrain['card_id']=train['card_id'].astype(str)\nhist1['card_id']=hist1['card_id'].astype(str)\ntraindata=pd.merge(train,hist1,on='card_id',how='left')\ntraindata=pd.merge(traindata,new1,on='card_id',how='left')\ntestdata=pd.merge(test,hist1,on='card_id',how='left')\ntestdata=pd.merge(testdata,new1,on='card_id',how='left')\n# traindata['hist_authorized_flag_sum'].sort_values()\n# traindata['hist_authorized_flag_sum'].describe()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"89d23dd60bd71e2197c1b5fbcae4825bb77a0ca7"},"cell_type":"code","source":"# import numpy as np\n# from sklearn.model_selection import KFold\n# X = [\"a\", \"b\", \"c\", \"d\"]\n# kf = KFold(n_splits=2)\n# for train, test in kf.split(X):\n#      print(\"%s %s\" % (train, test))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"60f4df054213b4de2e63e063d5fab074d3be85a9"},"cell_type":"code","source":"os.getcwd()\n# testdata.to_csv('test.csv')\n# target=traindata['target']\n# traindata.to_csv('train.csv')\n# del train['target']\n# test.head()\n# traindata.head()\n# train.head()\ntrain=traindata\ntest=testdata\ntarget=train['target']\ndel train['target']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5ab396325c097faf13cb8ff78e0dca34b9f74b8e"},"cell_type":"code","source":"features = [c for c in traindata.columns if c not in ['card_id', 'first_active_month']]\ncategorical_feats = ['feature_2', 'feature_3']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"40446373d3bd1d54f6ddb97de6ab63560a74aa10"},"cell_type":"code","source":"param = {'objective':'regression',\n         'num_leaves': 31,\n         'min_data_in_leaf': 25,\n         'max_depth': 7,\n         'learning_rate': 0.01,\n         'lambda_l1':0.13,\n         \"boosting\": \"gbdt\",\n         \"feature_fraction\":0.85,\n         'bagging_freq':8,\n         \"bagging_fraction\": 0.9 ,\n         \"metric\": 'rmse',\n         \"verbosity\": -1,\n         \"random_state\": 2333}","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3fc38cbd2b2d2c344ccb82b079c2da0b1f5840e7"},"cell_type":"code","source":"folds = KFold(n_splits=5, shuffle=True, random_state=15)\noof = np.zeros(len(train))\npredictions = np.zeros(len(test))\nstart = time.time()\nfeature_importance_df = pd.DataFrame()\ntrain.head(5)\nfor fold_, (trn_idx, val_idx) in enumerate(folds.split(train.values, target.values)):\n    print(\"fold n°{}\".format(fold_))\n    trn_data = lgb.Dataset(train.iloc[trn_idx][features],\n                           label=target.iloc[trn_idx],\n                           categorical_feature=categorical_feats)\n    val_data = lgb.Dataset(train.iloc[val_idx][features],\n                           label=target.iloc[val_idx],\n                           categorical_feature=categorical_feats )\n    num_round = 10000\n    clf = lgb.train(param,\n                    trn_data,\n                    num_round,\n                    valid_sets = [trn_data, val_data],\n                    verbose_eval=100,\n                    early_stopping_rounds = 200)\n    \n    oof[val_idx] = clf.predict(train.iloc[val_idx][features], num_iteration=clf.best_iteration)\n    \n    fold_importance_df = pd.DataFrame()\n    fold_importance_df[\"feature\"] = features\n    fold_importance_df[\"importance\"] = clf.feature_importance()\n    fold_importance_df[\"fold\"] = fold_ + 1\n    feature_importance_df = pd.concat([feature_importance_df, fold_importance_df], axis=0)\n    \n    predictions += clf.predict(test[features], num_iteration=clf.best_iteration) / folds.n_splits\n\nprint(\"CV score: {:<8.5f}\".format(mean_squared_error(oof, target)**0.5))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2cf6eadee0eee3c585ea36d4c3c44668049cf78e"},"cell_type":"code","source":"cols = (feature_importance_df[[\"feature\", \"importance\"]]\n        .groupby(\"feature\")\n        .mean()\n        .sort_values(by=\"importance\", ascending=False)[:1000].index)\n\nbest_features = feature_importance_df.loc[feature_importance_df.feature.isin(cols)]\n\nplt.figure(figsize=(14,25))\nsns.barplot(x=\"importance\",\n            y=\"feature\",\n            data=best_features.sort_values(by=\"importance\",\n                                           ascending=False))\nplt.title('LightGBM Features (avg over folds)')\nplt.tight_layout()\nplt.savefig('lgbm_importances.png')\nsample_submission = pd.read_csv('../input/sample_submission.csv')\nsample_submission['target'] = predictions\nsample_submission.to_csv('submission.csv', index=False)\n","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}