{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n        \n        \nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.model_selection import KFold","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-03-21T06:27:57.130843Z","iopub.execute_input":"2022-03-21T06:27:57.131235Z","iopub.status.idle":"2022-03-21T06:27:58.317607Z","shell.execute_reply.started":"2022-03-21T06:27:57.131116Z","shell.execute_reply":"2022-03-21T06:27:58.316692Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### 1. Loading the Data","metadata":{}},{"cell_type":"code","source":"def reduce_mem_usage(df, verbose=True):\n    numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']\n    start_mem = df.memory_usage().sum() / 1024**2    \n    for col in df.columns:\n        col_type = df[col].dtypes\n        if col_type in numerics:\n            c_min = df[col].min()\n            c_max = df[col].max()\n            if str(col_type)[:3] == 'int':\n                if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:\n                    df[col] = df[col].astype(np.int8)\n                elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:\n                    df[col] = df[col].astype(np.int16)\n                elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:\n                    df[col] = df[col].astype(np.int32)\n                elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:\n                    df[col] = df[col].astype(np.int64)  \n            else:\n                if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:\n                    df[col] = df[col].astype(np.float16)\n                elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:\n                    df[col] = df[col].astype(np.float32)\n                else:\n                    df[col] = df[col].astype(np.float64)    \n    end_mem = df.memory_usage().sum() / 1024**2\n    if verbose: print('Mem. usage decreased to {:5.2f} Mb ({:.1f}% reduction)'.format(end_mem, 100 * (start_mem - end_mem) / start_mem))\n    return df","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:27:58.319222Z","iopub.execute_input":"2022-03-21T06:27:58.319477Z","iopub.status.idle":"2022-03-21T06:27:58.332587Z","shell.execute_reply.started":"2022-03-21T06:27:58.319444Z","shell.execute_reply":"2022-03-21T06:27:58.331609Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"new_transactions = pd.read_csv('/kaggle/input/elo-merchant-category-recommendation/new_merchant_transactions.csv',\n                              parse_dates = ['purchase_date'])\nhistorical_transactions = pd.read_csv('/kaggle/input/elo-merchant-category-recommendation/historical_transactions.csv',\n                                     parse_dates = ['purchase_date'])","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:27:58.333785Z","iopub.execute_input":"2022-03-21T06:27:58.334051Z","iopub.status.idle":"2022-03-21T06:29:39.902131Z","shell.execute_reply.started":"2022-03-21T06:27:58.334020Z","shell.execute_reply":"2022-03-21T06:29:39.900980Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def binarize(df):\n    for col in ['authorized_flag', 'category_1']:\n        df[col] = df[col].map({'Y':1, 'N':0})\n    return df\n\nhistorical_transactions = binarize(historical_transactions)\nnew_transactions = binarize(new_transactions)","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:29:39.903820Z","iopub.execute_input":"2022-03-21T06:29:39.904068Z","iopub.status.idle":"2022-03-21T06:29:44.760694Z","shell.execute_reply.started":"2022-03-21T06:29:39.904028Z","shell.execute_reply":"2022-03-21T06:29:44.759766Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import datetime\nimport time\n\ndef read_data(input_file):\n    df = pd.read_csv(input_file)\n    df['first_active_month'] = pd.to_datetime(df['first_active_month'])\n    df['elapsed_time'] = (datetime.date(2018, 2, 1) - df['first_active_month'].dt.date).dt.days\n    return df\n\ntrain = read_data('/kaggle/input/elo-merchant-category-recommendation/train.csv')\ntest = read_data('/kaggle/input/elo-merchant-category-recommendation/test.csv')\n\ntarget = train['target']\ndel train['target']","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:29:44.761929Z","iopub.execute_input":"2022-03-21T06:29:44.762281Z","iopub.status.idle":"2022-03-21T06:29:46.065381Z","shell.execute_reply.started":"2022-03-21T06:29:44.762237Z","shell.execute_reply":"2022-03-21T06:29:46.064425Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### 2. Feature Engineering","metadata":{}},{"cell_type":"code","source":"new_transactions.head(5)","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:29:46.066367Z","iopub.execute_input":"2022-03-21T06:29:46.066567Z","iopub.status.idle":"2022-03-21T06:29:46.093420Z","shell.execute_reply.started":"2022-03-21T06:29:46.066542Z","shell.execute_reply":"2022-03-21T06:29:46.092486Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"new_transactions.info()","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:29:46.094458Z","iopub.execute_input":"2022-03-21T06:29:46.094680Z","iopub.status.idle":"2022-03-21T06:29:46.112223Z","shell.execute_reply.started":"2022-03-21T06:29:46.094653Z","shell.execute_reply":"2022-03-21T06:29:46.110774Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"historical_transactions['month_diff'] = ((datetime.datetime.today() - historical_transactions['purchase_date']).dt.days)//30\nhistorical_transactions['month_diff'] += historical_transactions['month_lag']\n\nnew_transactions['month_diff'] = ((datetime.datetime.today() - new_transactions['purchase_date']).dt.days)//30\nnew_transactions['month_diff'] += new_transactions['month_lag']","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:29:46.113433Z","iopub.execute_input":"2022-03-21T06:29:46.113670Z","iopub.status.idle":"2022-03-21T06:29:47.775948Z","shell.execute_reply.started":"2022-03-21T06:29:46.113641Z","shell.execute_reply":"2022-03-21T06:29:47.774955Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"historical_transactions = pd.get_dummies(historical_transactions, columns = ['category_2', 'category_3'])\nnew_transactions = pd.get_dummies(new_transactions, columns = ['category_2', 'category_3'])\n\nhistorical_transactions = reduce_mem_usage(historical_transactions)\nnew_transactions = reduce_mem_usage(new_transactions)","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:29:47.777116Z","iopub.execute_input":"2022-03-21T06:29:47.777401Z","iopub.status.idle":"2022-03-21T06:29:59.098834Z","shell.execute_reply.started":"2022-03-21T06:29:47.777370Z","shell.execute_reply":"2022-03-21T06:29:59.097942Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"new_transactions.info()","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:29:59.101515Z","iopub.execute_input":"2022-03-21T06:29:59.101784Z","iopub.status.idle":"2022-03-21T06:29:59.113430Z","shell.execute_reply.started":"2022-03-21T06:29:59.101754Z","shell.execute_reply":"2022-03-21T06:29:59.112241Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"agg_fun = {'authorized_flag':['mean']}\nauth_mean = historical_transactions.groupby(['card_id']).agg(agg_fun)\nauth_mean.columns = ['_'.join(col).strip() for col in auth_mean.columns.values]\nauth_mean.reset_index(inplace = True)","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:29:59.114644Z","iopub.execute_input":"2022-03-21T06:29:59.114947Z","iopub.status.idle":"2022-03-21T06:30:02.204909Z","shell.execute_reply.started":"2022-03-21T06:29:59.114914Z","shell.execute_reply":"2022-03-21T06:30:02.204043Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**auth_mean** is to groupby **card_id** following the **mean of its authorized_flag**","metadata":{}},{"cell_type":"code","source":"authorized_transactions = historical_transactions[historical_transactions['authorized_flag'] == 1]\nhistorical_transactions = historical_transactions[historical_transactions['authorized_flag'] == 0]","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:30:02.205943Z","iopub.execute_input":"2022-03-21T06:30:02.206147Z","iopub.status.idle":"2022-03-21T06:30:07.111335Z","shell.execute_reply.started":"2022-03-21T06:30:02.206122Z","shell.execute_reply":"2022-03-21T06:30:07.110639Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"historical_transactions['purchase_month'] = historical_transactions['purchase_date'].dt.month\nauthorized_transactions['purchase_month'] = authorized_transactions['purchase_date'].dt.month\nnew_transactions['purchase_month'] = new_transactions['purchase_date'].dt.month","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:30:07.112722Z","iopub.execute_input":"2022-03-21T06:30:07.113245Z","iopub.status.idle":"2022-03-21T06:30:10.552518Z","shell.execute_reply.started":"2022-03-21T06:30:07.113200Z","shell.execute_reply":"2022-03-21T06:30:10.551543Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def aggregate_transactions(history):\n    \n    history.loc[:, 'purchase_date'] = pd.DatetimeIndex(history['purchase_date']).\\\n                                      astype(np.int64) * 1e-9\n    \n    agg_func = {\n    'category_1': ['sum', 'mean'],\n    'category_2_1.0': ['mean'],\n    'category_2_2.0': ['mean'],\n    'category_2_3.0': ['mean'],\n    'category_2_4.0': ['mean'],\n    'category_2_5.0': ['mean'],\n    'category_3_A': ['mean'],\n    'category_3_B': ['mean'],\n    'category_3_C': ['mean'],\n    'merchant_id': ['nunique'],\n    'merchant_category_id': ['nunique'],\n    'state_id': ['nunique'],\n    'city_id': ['nunique'],\n    'subsector_id': ['nunique'],\n    'purchase_amount': ['sum', 'mean', 'max', 'min', 'std'],\n    'installments': ['sum', 'mean', 'max', 'min', 'std'],\n    'purchase_month': ['mean', 'max', 'min', 'std'],\n    'purchase_date': [np.ptp, 'min', 'max'],\n    'month_lag': ['mean', 'max', 'min', 'std'],\n    'month_diff': ['mean']\n    }\n    \n    agg_history = history.groupby(['card_id']).agg(agg_func)\n    agg_history.columns = ['_'.join(col).strip() for col in agg_history.columns.values]\n    agg_history.reset_index(inplace=True)\n    \n    df = (history.groupby('card_id').size().reset_index(name = 'transactions_count'))\n    \n    agg_history = pd.merge(df, agg_history, on = 'card_id', how = 'left')\n    \n    return agg_history","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:30:10.553736Z","iopub.execute_input":"2022-03-21T06:30:10.553956Z","iopub.status.idle":"2022-03-21T06:30:10.563337Z","shell.execute_reply.started":"2022-03-21T06:30:10.553928Z","shell.execute_reply":"2022-03-21T06:30:10.562281Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = aggregate_transactions(historical_transactions)\nhistory.columns = ['hist_' + c if c != 'card_id' else c for c in history.columns]","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:30:10.564932Z","iopub.execute_input":"2022-03-21T06:30:10.565823Z","iopub.status.idle":"2022-03-21T06:30:41.193392Z","shell.execute_reply.started":"2022-03-21T06:30:10.565770Z","shell.execute_reply":"2022-03-21T06:30:41.192677Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history.head(5)","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:30:41.194827Z","iopub.execute_input":"2022-03-21T06:30:41.195811Z","iopub.status.idle":"2022-03-21T06:30:41.225779Z","shell.execute_reply.started":"2022-03-21T06:30:41.195759Z","shell.execute_reply":"2022-03-21T06:30:41.224459Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"authorized = aggregate_transactions(authorized_transactions)\nauthorized.columns = ['autho_' + c if c != 'card_id' else c for c in authorized.columns]","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:30:41.226878Z","iopub.execute_input":"2022-03-21T06:30:41.227636Z","iopub.status.idle":"2022-03-21T06:32:05.657561Z","shell.execute_reply.started":"2022-03-21T06:30:41.227593Z","shell.execute_reply":"2022-03-21T06:32:05.656932Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"new = aggregate_transactions(new_transactions)\nnew.columns = ['new_' + c if c != 'card_id' else c for c in new.columns]","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:32:05.658746Z","iopub.execute_input":"2022-03-21T06:32:05.659579Z","iopub.status.idle":"2022-03-21T06:32:37.410572Z","shell.execute_reply.started":"2022-03-21T06:32:05.659542Z","shell.execute_reply":"2022-03-21T06:32:37.409332Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def aggregate_per_month(history) :\n    grouped = history.groupby(['card_id', 'month_lag'])\n    agg_func = {\n        'purchase_amount' : ['count', 'sum', 'mean', 'min', 'max', 'std'],\n        'installments' : ['count', 'sum', 'mean', 'min', 'max', 'std'],\n    }\n    \n    intermediate_group = grouped.agg(agg_func)\n    intermediate_group.columns = ['_'.join(col).strip() for col in intermediate_group.columns.values]\n    intermediate_group.reset_index(inplace = True)\n    \n    final_group = intermediate_group.groupby('card_id').agg(['mean', 'std'])\n    final_group.columns = ['_'.join(col).strip() for col in final_group.columns.values]\n    final_group.reset_index(inplace=True)\n    \n    return final_group\n\nfinal_group =  aggregate_per_month(authorized_transactions) \nfinal_group[:10]","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:32:37.412106Z","iopub.execute_input":"2022-03-21T06:32:37.412389Z","iopub.status.idle":"2022-03-21T06:32:49.268919Z","shell.execute_reply.started":"2022-03-21T06:32:37.412359Z","shell.execute_reply":"2022-03-21T06:32:49.268271Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def successive_aggregates(df, field1, field2):\n    t = df.groupby(['card_id', field1])[field2].mean()\n    u = pd.DataFrame(t).reset_index().groupby('card_id')[field2].agg(['mean', 'min', 'max', 'std'])\n    u.columns = [field1 + '_' + field2 + '_' + col for col in u.columns.values]\n    u.reset_index(inplace = True)\n    return u","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:32:49.269946Z","iopub.execute_input":"2022-03-21T06:32:49.270358Z","iopub.status.idle":"2022-03-21T06:32:49.275871Z","shell.execute_reply.started":"2022-03-21T06:32:49.270309Z","shell.execute_reply":"2022-03-21T06:32:49.275257Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"additional_fields = successive_aggregates(new_transactions, 'category_1', 'purchase_amount')\nadditional_fields = additional_fields.merge(successive_aggregates(new_transactions, 'installments', 'purchase_amount'), on = 'card_id', how = 'left')\nadditional_fields = additional_fields.merge(successive_aggregates(new_transactions, 'city_id', 'purchase_amount'), on = 'card_id', how = 'left')\nadditional_fields = additional_fields.merge(successive_aggregates(new_transactions, 'category_1', 'installments'), on = 'card_id', how = 'left')","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:32:49.277002Z","iopub.execute_input":"2022-03-21T06:32:49.277250Z","iopub.status.idle":"2022-03-21T06:32:55.865103Z","shell.execute_reply.started":"2022-03-21T06:32:49.277219Z","shell.execute_reply":"2022-03-21T06:32:55.864191Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.merge(train, history, on='card_id', how='left')\ntest = pd.merge(test, history, on='card_id', how='left')\n\ntrain = pd.merge(train, authorized, on='card_id', how='left')\ntest = pd.merge(test, authorized, on='card_id', how='left')\n\ntrain = pd.merge(train, new, on='card_id', how='left')\ntest = pd.merge(test, new, on='card_id', how='left')\n\ntrain = pd.merge(train, final_group, on='card_id', how='left')\ntest = pd.merge(test, final_group, on='card_id', how='left')\n\ntrain = pd.merge(train, auth_mean, on='card_id', how='left')\ntest = pd.merge(test, auth_mean, on='card_id', how='left')\n\ntrain = pd.merge(train, additional_fields, on='card_id', how='left')\ntest = pd.merge(test, additional_fields, on='card_id', how='left')","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:32:55.866453Z","iopub.execute_input":"2022-03-21T06:32:55.866704Z","iopub.status.idle":"2022-03-21T06:33:01.555718Z","shell.execute_reply.started":"2022-03-21T06:32:55.866673Z","shell.execute_reply":"2022-03-21T06:33:01.554852Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.to_csv('test.csv')\ntrain['target'] = target\ntrain.to_csv('train.csv')\ndel train['target']","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:33:01.557253Z","iopub.execute_input":"2022-03-21T06:33:01.557963Z","iopub.status.idle":"2022-03-21T06:33:45.931016Z","shell.execute_reply.started":"2022-03-21T06:33:01.557915Z","shell.execute_reply":"2022-03-21T06:33:45.930188Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"type(target)","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:39:56.850832Z","iopub.execute_input":"2022-03-21T06:39:56.851098Z","iopub.status.idle":"2022-03-21T06:39:56.857902Z","shell.execute_reply.started":"2022-03-21T06:39:56.851070Z","shell.execute_reply":"2022-03-21T06:39:56.856761Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### 3. Model training","metadata":{}},{"cell_type":"code","source":"features = [c for c in train.columns if c not in ['card_id', 'first_active_month']]\ncategorical_feats = ['feature_2', 'feature_3']","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:33:45.932395Z","iopub.execute_input":"2022-03-21T06:33:45.932877Z","iopub.status.idle":"2022-03-21T06:33:45.938588Z","shell.execute_reply.started":"2022-03-21T06:33:45.932833Z","shell.execute_reply":"2022-03-21T06:33:45.937721Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"param = {'num_leavs' : 111,\n         'min_data_in_leaf' : 149,\n         'objective' : 'regression',\n         'max_depth' : 9,\n         'learning_rate' : 0.005,\n         'boosting' : 'gbdt',\n         'feature_fraction' : 0.7522,\n         'bagging_freq' : 1,\n         'bagging_fraction' : 0.7083,\n         'bagging_seed' : 11,\n         'metric' : 'rmse',\n         'lambda_l1' : 0.2634,\n         'random_state' : 133,\n         'verbosity' : -1\n        }","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:33:45.939583Z","iopub.execute_input":"2022-03-21T06:33:45.940158Z","iopub.status.idle":"2022-03-21T06:33:45.952814Z","shell.execute_reply.started":"2022-03-21T06:33:45.940125Z","shell.execute_reply":"2022-03-21T06:33:45.952107Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import lightgbm as lgb\nfrom sklearn.metrics import mean_squared_error\n\nfolds = 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()\n\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                          )\n    val_data = lgb.Dataset(train.iloc[val_idx][features],\n                           label=target.iloc[val_idx],\n                           categorical_feature=categorical_feats\n                          )\n\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))","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:33:45.954375Z","iopub.execute_input":"2022-03-21T06:33:45.954875Z","iopub.status.idle":"2022-03-21T06:39:38.359622Z","shell.execute_reply.started":"2022-03-21T06:33:45.954828Z","shell.execute_reply":"2022-03-21T06:39:38.358570Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df = pd.DataFrame({\"card_id\" : test[\"card_id\"].values})\nsub_df[\"target\"] = predictions\nsub_df.to_csv(\"submit.csv\", index = False)","metadata":{"execution":{"iopub.status.busy":"2022-03-21T06:39:38.362003Z","iopub.status.idle":"2022-03-21T06:39:38.365198Z","shell.execute_reply.started":"2022-03-21T06:39:38.364713Z","shell.execute_reply":"2022-03-21T06:39:38.364750Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}