{"cells":[{"metadata":{"_uuid":"e8e112aa5b5db7303e39d3a9cf1702848962c6c2"},"cell_type":"markdown","source":"### Introduction\n\nIn this kernel I demonstrate how to create predictions at Session level and then use them at User level so that LighGBM can learn how to better sum individual session prediction. \n\nIt is sort of mini stacker and to avoid leakage, we use GroupKFold strategy.\n"},{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":true},"cell_type":"code","source":"import os\nprint(os.listdir(\"../input\"))","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.metrics import mean_squared_error\nimport gc\nimport time\nfrom pandas.core.common import SettingWithCopyWarning\nimport warnings\nimport lightgbm as lgb\nfrom sklearn.model_selection import GroupKFold\n\n# I don't like SettingWithCopyWarnings ...\nwarnings.simplefilter('error', SettingWithCopyWarning)\ngc.enable()\n%matplotlib inline","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"e8c6c0d5d8cf00737b8ae536b0d528b32fac9166"},"cell_type":"markdown","source":"### Get the extracted data"},{"metadata":{"_uuid":"6fe04db087c3d25b8b4a5873ee6f104e427525f0","trusted":true},"cell_type":"code","source":"train = pd.read_csv('../input/create-extracted-json-fields-dataset/extracted_fields_train.gz', \n                    dtype={'date': str, 'fullVisitorId': str, 'sessionId':str})\ntest = pd.read_csv('../input/create-extracted-json-fields-dataset/extracted_fields_test.gz', \n                   dtype={'date': str, 'fullVisitorId': str, 'sessionId':str})\ntrain.shape, test.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2f473f2892107c8f6efff34a6a46b706a223c6d8"},"cell_type":"code","source":"train.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0306a48e2eedf70e6636aa5e31902d4de9097ff9"},"cell_type":"code","source":"train.columns","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b64b336b70ccb5478d33f9e042eeeabee549c919"},"cell_type":"markdown","source":"### Define folding strategy"},{"metadata":{"_uuid":"cd54722ebf9ae8b68eddb2116c0559625e7d6a48","trusted":true},"cell_type":"code","source":"def get_folds(df=None, n_splits=5):\n    \"\"\"Returns dataframe indices corresponding to Visitors Group KFold\"\"\"\n    # Get sorted unique visitors\n    unique_vis = np.array(sorted(df['fullVisitorId'].unique()))\n\n    # Get folds\n    folds = GroupKFold(n_splits=n_splits)\n    fold_ids = []\n    ids = np.arange(df.shape[0])\n    for trn_vis, val_vis in folds.split(X=unique_vis, y=unique_vis, groups=unique_vis):\n        fold_ids.append(\n            [\n                ids[df['fullVisitorId'].isin(unique_vis[trn_vis])],\n                ids[df['fullVisitorId'].isin(unique_vis[val_vis])]\n            ]\n        )\n\n    return fold_ids","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"18b2fb7729077132ef249956a1bbb072baee17db"},"cell_type":"markdown","source":"### Get session target"},{"metadata":{"_uuid":"c539c76d9a5305066ea084ca32016132da41b35b","trusted":true},"cell_type":"code","source":"y_reg = train['totals.transactionRevenue'].fillna(0)\ndel train['totals.transactionRevenue']\n\nif 'totals.transactionRevenue' in test.columns:\n    del test['totals.transactionRevenue']","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"1d9af86b1cf94e192d704bfd419eed4490e1debe"},"cell_type":"markdown","source":"### Add date features\n\nOnly add the one I think can ganeralize"},{"metadata":{"_uuid":"fbf93fda18940aa29105fa2d66f3514311d4fc68","trusted":true},"cell_type":"code","source":"train.columns","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b04391e12fdca0199ff22ab7febd9b0b53d6cbb3","trusted":true},"cell_type":"code","source":"train['target'] = y_reg\nfor df in [train, test]:\n    df['date'] = pd.to_datetime(df['visitStartTime'], unit='s')\n    df['sess_date_dow'] = df['date'].dt.dayofweek\n    df['sess_date_hours'] = df['date'].dt.hour\n    df['sess_date_dom'] = df['date'].dt.day\n    df.sort_values(['fullVisitorId', 'date'], ascending=True, inplace=True)\n    df['next_session_1'] = (\n        df['date'] - df[['fullVisitorId', 'date']].groupby('fullVisitorId')['date'].shift(1)\n    ).astype(np.int64) // 1e9 // 60 // 60\n    df['next_session_2'] = (\n        df['date'] - df[['fullVisitorId', 'date']].groupby('fullVisitorId')['date'].shift(-1)\n    ).astype(np.int64) // 1e9 // 60 // 60\n\ny_reg = train['target']\ndel train['target']","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"59e7c9bcf14d3f430489d15d22757b91dd9d5ad1"},"cell_type":"markdown","source":"### Create features list"},{"metadata":{"_uuid":"e09ff3124721ad70eab65b924093b5fd0c12f9c6","trusted":true},"cell_type":"code","source":"excluded_features = [\n    'date', 'fullVisitorId', 'sessionId', 'totals.transactionRevenue', \n    'visitId', 'visitStartTime'\n]\n\ncategorical_features = [\n    _f for _f in train.columns\n    if (_f not in excluded_features) & (train[_f].dtype == 'object')\n]","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"2d207a80600a44e758b6011f24c5808f9b164866"},"cell_type":"markdown","source":"### Factorize categoricals"},{"metadata":{"_uuid":"4f00eb6b6166cd5be25ebad22aa9dc91a8a3ded2","trusted":true},"cell_type":"code","source":"for f in categorical_features:\n    train[f], indexer = pd.factorize(train[f])\n    test[f] = indexer.get_indexer(test[f])","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d7517b473bd776f51925ab0243cf1e3b6592ce0e"},"cell_type":"markdown","source":"### Predict revenues at session level"},{"metadata":{"_uuid":"e9c155197545dc43ec2f3e23e25955532f7ad25d","trusted":true},"cell_type":"code","source":"folds = get_folds(df=train, n_splits=5)\n\ntrain_features = [_f for _f in train.columns if _f not in excluded_features]\nprint(train_features)\n\nimportances = pd.DataFrame()\noof_reg_preds = np.zeros(train.shape[0])\nsub_reg_preds = np.zeros(test.shape[0])\nfor fold_, (trn_, val_) in enumerate(folds):\n    trn_x, trn_y = train[train_features].iloc[trn_], y_reg.iloc[trn_]\n    val_x, val_y = train[train_features].iloc[val_], y_reg.iloc[val_]\n    \n    reg = lgb.LGBMRegressor(\n        num_leaves=31,\n        learning_rate=0.03,\n        n_estimators=1000,\n        subsample=.9,\n        colsample_bytree=.9,\n        random_state=1\n    )\n    reg.fit(\n        trn_x, np.log1p(trn_y),\n        eval_set=[(val_x, np.log1p(val_y))],\n        early_stopping_rounds=50,\n        verbose=100,\n        eval_metric='rmse'\n    )\n    imp_df = pd.DataFrame()\n    imp_df['feature'] = train_features\n    imp_df['gain'] = reg.booster_.feature_importance(importance_type='gain')\n    \n    imp_df['fold'] = fold_ + 1\n    importances = pd.concat([importances, imp_df], axis=0, sort=False)\n    \n    oof_reg_preds[val_] = reg.predict(val_x, num_iteration=reg.best_iteration_)\n    oof_reg_preds[oof_reg_preds < 0] = 0\n    _preds = reg.predict(test[train_features], num_iteration=reg.best_iteration_)\n    _preds[_preds < 0] = 0\n    sub_reg_preds += np.expm1(_preds) / len(folds)\n    \nmean_squared_error(np.log1p(y_reg), oof_reg_preds) ** .5","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"2b23cdb7ee1e35c6deba9edd6ffd87a4cdc72920"},"cell_type":"markdown","source":"### Display feature importances"},{"metadata":{"_uuid":"61d4aacc57c2c7c4d9ce0b1cab7221ca7c69138f","trusted":true},"cell_type":"code","source":"import warnings\nwarnings.simplefilter('ignore', FutureWarning)\n\nimportances['gain_log'] = np.log1p(importances['gain'])\nmean_gain = importances[['gain', 'feature']].groupby('feature').mean()\nimportances['mean_gain'] = importances['feature'].map(mean_gain['gain'])\n\nplt.figure(figsize=(8, 12))\nsns.barplot(x='gain_log', y='feature', data=importances.sort_values('mean_gain', ascending=False))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"c64447b5858dc899b6b78d26a4e68a8582995051"},"cell_type":"markdown","source":"### Create user level predictions"},{"metadata":{"_uuid":"1fc92504b40407cff766489db1966e729d0466df","trusted":true},"cell_type":"code","source":"train['predictions'] = np.expm1(oof_reg_preds)\ntest['predictions'] = sub_reg_preds","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"515d3d14483844c93710fb6b6f9e39a6a2a1d384","trusted":true},"cell_type":"code","source":"# Aggregate data at User level\ntrn_data = train[train_features + ['fullVisitorId']].groupby('fullVisitorId').mean()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"31d76001e77e3ee2e10e67a5bc899a83c4cfeb8d","trusted":true},"cell_type":"code","source":"%%time\n# Create a list of predictions for each Visitor\ntrn_pred_list = train[['fullVisitorId', 'predictions']].groupby('fullVisitorId')\\\n    .apply(lambda df: list(df.predictions))\\\n    .apply(lambda x: {'pred_'+str(i): pred for i, pred in enumerate(x)})","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b8f1bac1ef32a58f70aa7bcca79acc7119ddcfb5","trusted":true},"cell_type":"code","source":"# Create a DataFrame with VisitorId as index\n# trn_pred_list contains dict \n# so creating a dataframe from it will expand dict values into columns\ntrn_all_predictions = pd.DataFrame(list(trn_pred_list.values), index=trn_data.index)\ntrn_feats = trn_all_predictions.columns\ntrn_all_predictions['t_mean'] = np.log1p(trn_all_predictions[trn_feats].mean(axis=1))\ntrn_all_predictions['t_median'] = np.log1p(trn_all_predictions[trn_feats].median(axis=1))\ntrn_all_predictions['t_sum_log'] = np.log1p(trn_all_predictions[trn_feats]).sum(axis=1)\ntrn_all_predictions['t_sum_act'] = np.log1p(trn_all_predictions[trn_feats].fillna(0).sum(axis=1))\ntrn_all_predictions['t_nb_sess'] = trn_all_predictions[trn_feats].isnull().sum(axis=1)\nfull_data = pd.concat([trn_data, trn_all_predictions], axis=1)\ndel trn_data, trn_all_predictions\ngc.collect()\nfull_data.shape","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"12a86e1f61f819417bede61f3746366b5028222f","trusted":true},"cell_type":"code","source":"%%time\nsub_pred_list = test[['fullVisitorId', 'predictions']].groupby('fullVisitorId')\\\n    .apply(lambda df: list(df.predictions))\\\n    .apply(lambda x: {'pred_'+str(i): pred for i, pred in enumerate(x)})","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"611f2a86ffff5947b6863818538577b58f099535","trusted":true},"cell_type":"code","source":"sub_data = test[train_features + ['fullVisitorId']].groupby('fullVisitorId').mean()\nsub_all_predictions = pd.DataFrame(list(sub_pred_list.values), index=sub_data.index)\nfor f in trn_feats:\n    if f not in sub_all_predictions.columns:\n        sub_all_predictions[f] = np.nan\nsub_all_predictions['t_mean'] = np.log1p(sub_all_predictions[trn_feats].mean(axis=1))\nsub_all_predictions['t_median'] = np.log1p(sub_all_predictions[trn_feats].median(axis=1))\nsub_all_predictions['t_sum_log'] = np.log1p(sub_all_predictions[trn_feats]).sum(axis=1)\nsub_all_predictions['t_sum_act'] = np.log1p(sub_all_predictions[trn_feats].fillna(0).sum(axis=1))\nsub_all_predictions['t_nb_sess'] = sub_all_predictions[trn_feats].isnull().sum(axis=1)\nsub_full_data = pd.concat([sub_data, sub_all_predictions], axis=1)\ndel sub_data, sub_all_predictions\ngc.collect()\nsub_full_data.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ef30597f9d58c0bed8548bb00b6830dd7c10ccf0"},"cell_type":"code","source":"train['target'] = y_reg\ntrn_user_target = train[['fullVisitorId', 'target']].groupby('fullVisitorId').sum()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d7618c2afd6a6474c8af4508885a49a137182532"},"cell_type":"code","source":"df = pd.concat([full_data,sub_full_data],sort=False)\ndf = df.reset_index(drop=False)\nfor c in df.columns[1:]:\n    if((df[c].min()>=0)&(df[c].max()>=10)):\n        df[c] = np.log1p(df[c])\n    elif((df[c].min()<0)&((df[c].max()-df[c].min())>=10)):\n        df.loc[df[c]!=0,c] = np.sign(df.loc[df[c]!=0,c])*np.log(np.abs(df.loc[df[c]!=0,c]))\nfrom sklearn.preprocessing import StandardScaler\nfor c in df.columns[1:]:\n    ss = StandardScaler()\n    df.loc[~np.isfinite(df[c]),c] = np.nan\n    df.loc[~df[c].isnull(),c] = ss.fit_transform(df.loc[~df[c].isnull(),c].values.reshape(-1,1))\ndf.fillna(-99999,inplace=True)\ngp_trn_users = df[:full_data.shape[0]].copy().set_index('fullVisitorId')\ngp_trn_users['target'] = np.log1p(trn_user_target['target'].values)\n#gp_trn_users['target'] /= gp_trn_users['target'].max()\ngp_sub_users = df[full_data.shape[0]:].copy().set_index('fullVisitorId')\nnewcols =  [x.replace('.','_') for x in gp_trn_users.columns]\ngp_trn_users.columns = newcols\nnewcols =  [x.replace('.','_') for x in gp_sub_users.columns]\ngp_sub_users.columns = newcols","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a0416f0f98895627ccb12e3a01af33c2bc63d344"},"cell_type":"code","source":"#gp_trn_users.to_csv('gptrain.csv',index=False,float_format='%.6f')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"072f7a0f840b032396235f40007ff1f8e3ad7031"},"cell_type":"code","source":"def GP1(data):\n    return (12.500000 +\n            0.100000*np.tanh(((((((((((-3.0) + (data[\"t_sum_log\"]))) - ((((12.95331287384033203)) / 2.0)))) * ((4.50129508972167969)))) + (data[\"t_sum_act\"]))) * 2.0)) +\n            0.100000*np.tanh(((((((((((((data[\"t_sum_log\"]) - ((9.0)))) * 2.0)) + (data[\"channelGrouping\"]))) * 2.0)) + (2.0))) * 2.0)) +\n            0.100000*np.tanh((((10.0)) * (((data[\"t_sum_log\"]) - (((((10.0)) + ((((4.60818958282470703)) + (((data[\"t_sum_log\"]) - (data[\"t_sum_act\"]))))))/2.0)))))) +\n            0.100000*np.tanh(((((((((((data[\"t_sum_act\"]) - ((8.0)))) * 2.0)) - (((3.0) * 2.0)))) + (data[\"t_sum_log\"]))) * 2.0)) +\n            0.100000*np.tanh((((((((((((((((data[\"t_sum_act\"]) + (2.0))/2.0)) + (data[\"t_sum_log\"]))) - ((12.46262645721435547)))) * 2.0)) * 2.0)) * 2.0)) * 2.0)) +\n            0.100000*np.tanh((((((10.0)) * (((((data[\"t_sum_log\"]) + (((((data[\"t_mean\"]) - (3.0))) - ((12.30329895019531250)))))) * 2.0)))) * 2.0)) +\n            0.100000*np.tanh((((11.12195396423339844)) * (((((data[\"t_sum_log\"]) - ((11.12195396423339844)))) + (((data[\"t_mean\"]) / 2.0)))))) +\n            0.100000*np.tanh(((((data[\"pred_2\"]) + (data[\"pred_1\"]))) - (((((data[\"pred_3\"]) - ((7.0)))) * (((data[\"t_mean\"]) - ((7.0)))))))) +\n            0.100000*np.tanh((((((8.0)) - (data[\"next_session_2\"]))) + (((((data[\"t_sum_log\"]) - (np.maximum((((8.0))), ((data[\"next_session_2\"])))))) * ((8.41708469390869141)))))) +\n            0.100000*np.tanh(((((data[\"pred_3\"]) + (((((data[\"pred_3\"]) + (((((data[\"pred_2\"]) - ((4.0)))) + (data[\"pred_4\"]))))) * 2.0)))) * 2.0)) +\n            0.100000*np.tanh(((((((((np.where(((data[\"t_sum_log\"]) - ((8.0)))>0, data[\"t_sum_log\"], data[\"t_sum_act\"] )) - ((8.0)))) * 2.0)) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((((((((data[\"pred_3\"]) + (((((((data[\"next_session_1\"]) + (data[\"pred_0\"]))/2.0)) + (data[\"pred_1\"]))/2.0)))) - ((5.55097246170043945)))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh((((((14.49165344238281250)) * (((data[\"t_sum_act\"]) - ((7.80256223678588867)))))) + (np.where(data[\"pred_5\"] < -99998, data[\"t_sum_log\"], ((data[\"t_sum_log\"]) * 2.0) )))) +\n            0.100000*np.tanh(((((((data[\"t_sum_log\"]) - ((6.95692586898803711)))) * (data[\"t_sum_act\"]))) + ((((8.0)) * (((data[\"t_sum_act\"]) - ((6.95692586898803711)))))))) +\n            0.100000*np.tanh(((((((((((((((data[\"t_sum_act\"]) - ((5.79598665237426758)))) * 2.0)) + (-3.0))) * 2.0)) * 2.0)) * 2.0)) + ((5.79598665237426758)))) +\n            0.100000*np.tanh(((data[\"pred_2\"]) + (((data[\"pred_4\"]) + (((data[\"pred_2\"]) + (((((data[\"t_median\"]) + (((-3.0) * 2.0)))) * 2.0)))))))) +\n            0.100000*np.tanh(((((((((((((data[\"t_sum_log\"]) - ((7.0)))) - ((((data[\"t_sum_log\"]) > (data[\"t_sum_act\"]))*1.)))) * 2.0)) * 2.0)) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((((data[\"t_sum_log\"]) + (((((data[\"t_sum_log\"]) + (((((data[\"t_sum_act\"]) - ((11.79764175415039062)))) * 2.0)))) * 2.0)))) * ((11.79764175415039062)))) +\n            0.100000*np.tanh(((((((((((data[\"t_sum_log\"]) - ((8.0)))) * 2.0)) * 2.0)) + ((((6.84783124923706055)) - (data[\"visitNumber\"]))))) * ((8.0)))) +\n            0.100000*np.tanh((((((7.0)) * (((data[\"t_sum_log\"]) + (((data[\"t_sum_act\"]) - ((14.84496498107910156)))))))) + (-3.0))) +\n            0.100000*np.tanh((((7.0)) * (((((((data[\"t_sum_act\"]) - ((7.0)))) * 2.0)) + (np.tanh((((data[\"totals_pageviews\"]) + (data[\"pred_4\"]))))))))) +\n            0.100000*np.tanh(((((((((((data[\"t_sum_log\"]) - ((8.0)))) * 2.0)) * 2.0)) + (((data[\"t_mean\"]) - (data[\"visitNumber\"]))))) * 2.0)) +\n            0.100000*np.tanh(((((((((np.minimum(((data[\"pred_0\"])), ((data[\"pred_4\"])))) + (((data[\"pred_3\"]) - (3.0))))) * 2.0)) * 2.0)) + (data[\"pred_3\"]))) +\n            0.100000*np.tanh((((((9.0)) * (((((((data[\"t_sum_log\"]) - ((9.88647079467773438)))) - (-3.0))) * 2.0)))) * 2.0)) +\n            0.100000*np.tanh(((((data[\"t_sum_act\"]) + (((((((data[\"t_sum_act\"]) + (((((data[\"t_sum_act\"]) - ((10.89448451995849609)))) * 2.0)))) * 2.0)) * 2.0)))) * 2.0)) +\n            0.100000*np.tanh(((((((((((data[\"t_sum_log\"]) - ((9.0)))) * 2.0)) * 2.0)) + ((2.0)))) + ((((9.0)) - (data[\"visitNumber\"]))))) +\n            0.100000*np.tanh(((((((data[\"t_mean\"]) - ((((9.0)) - (((data[\"t_sum_log\"]) - ((7.0)))))))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh((((((((((((7.24431943893432617)) * (((data[\"t_sum_log\"]) - ((7.24431943893432617)))))) - ((7.24431943893432617)))) + (-2.0))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh((((((14.16644096374511719)) * (((data[\"t_sum_act\"]) - ((((14.16644096374511719)) - (np.maximum((((8.0))), ((data[\"t_sum_log\"])))))))))) - ((8.0)))) +\n            0.100000*np.tanh(((((((((((data[\"t_mean\"]) + (((((data[\"t_sum_log\"]) - ((((5.0)) * 2.0)))) * 2.0)))) * 2.0)) * 2.0)) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((data[\"pred_4\"]) + ((((14.16003227233886719)) * ((((14.16003227233886719)) * (((np.maximum(((data[\"t_median\"])), ((data[\"t_mean\"])))) - ((6.0)))))))))) +\n            0.100000*np.tanh(((data[\"pred_1\"]) + ((((((8.92317485809326172)) * (((np.maximum(((data[\"t_sum_log\"])), ((data[\"pred_1\"])))) - ((8.92317485809326172)))))) * 2.0)))) +\n            0.100000*np.tanh((((((10.0)) * 2.0)) * (((data[\"t_sum_log\"]) - ((((((10.0)) - (data[\"t_mean\"]))) * 2.0)))))) +\n            0.100000*np.tanh(((((((((data[\"t_sum_log\"]) - ((8.0)))) * ((((9.0)) + ((12.95555210113525391)))))) - (data[\"t_sum_log\"]))) * ((9.0)))) +\n            0.100000*np.tanh(((((((data[\"pred_3\"]) + (((((data[\"t_sum_log\"]) - ((8.74195766448974609)))) * (((data[\"visitNumber\"]) * 2.0)))))) * 2.0)) * ((8.74195766448974609)))) +\n            0.100000*np.tanh((((((10.68931770324707031)) * (((((((((data[\"t_sum_log\"]) - ((10.0)))) * 2.0)) + (data[\"t_mean\"]))) * 2.0)))) + (data[\"t_sum_log\"]))) +\n            0.100000*np.tanh(((((data[\"t_sum_log\"]) + (((((((data[\"t_sum_log\"]) - (np.maximum((((9.0))), ((data[\"visitNumber\"])))))) * 2.0)) * 2.0)))) * 2.0)) +\n            0.100000*np.tanh((((10.33415031433105469)) * ((((14.93418216705322266)) * (((((((data[\"t_sum_act\"]) - ((9.26103305816650391)))) * 2.0)) + (data[\"t_sum_log\"]))))))) +\n            0.100000*np.tanh(((((np.maximum(((data[\"t_sum_log\"])), ((((data[\"totals_hits\"]) + (data[\"pred_1\"])))))) - (np.maximum((((9.0))), ((data[\"visitNumber\"])))))) * ((9.0)))) +\n            0.100000*np.tanh((((((((data[\"pred_0\"]) + (data[\"t_sum_log\"]))/2.0)) - ((((14.61157703399658203)) - (data[\"t_sum_log\"]))))) + (data[\"pred_1\"]))) +\n            0.100000*np.tanh((((((((8.0)) - (data[\"t_mean\"]))) * (-3.0))) - ((((7.0)) - (np.maximum(((data[\"pred_0\"])), ((data[\"pred_3\"])))))))) +\n            0.100000*np.tanh((((((12.26031208038330078)) * (((data[\"t_mean\"]) + (((data[\"t_sum_log\"]) - ((12.26031208038330078)))))))) * 2.0)) +\n            0.100000*np.tanh((((9.30737781524658203)) * (((((data[\"t_sum_log\"]) - ((9.30737781524658203)))) + (((((data[\"t_sum_act\"]) * 2.0)) - ((9.30737781524658203)))))))) +\n            0.100000*np.tanh((((((((9.85758876800537109)) * (((data[\"t_sum_log\"]) - ((8.81438827514648438)))))) - ((8.0)))) * ((8.81438827514648438)))) +\n            0.100000*np.tanh(((((((((data[\"pred_0\"]) - ((((13.48505210876464844)) - (((data[\"pred_1\"]) + (data[\"t_sum_log\"]))))))) * 2.0)) - (2.0))) * 2.0)) +\n            0.100000*np.tanh((((((((((((9.53180027008056641)) * (((data[\"t_sum_log\"]) - ((6.0)))))) * 2.0)) * 2.0)) + ((((9.53180027008056641)) / 2.0)))) * 2.0)) +\n            0.100000*np.tanh(((data[\"pred_3\"]) + (((data[\"pred_3\"]) + (((data[\"pred_3\"]) + (((((((data[\"t_sum_log\"]) - ((10.0)))) * 2.0)) * 2.0)))))))) +\n            0.100000*np.tanh(((((((((((((data[\"t_sum_act\"]) - ((11.60270595550537109)))) + (data[\"t_sum_log\"]))) * 2.0)) * ((11.60270595550537109)))) - ((11.60270595550537109)))) * 2.0)) +\n            0.100000*np.tanh(((((((((((data[\"pred_0\"]) - ((9.22513771057128906)))) * ((9.22513771057128906)))) - (data[\"t_median\"]))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((((((((data[\"pred_3\"]) + (((((data[\"t_sum_log\"]) - ((10.0)))) * ((10.0)))))) * 2.0)) + ((10.0)))) * 2.0)) +\n            0.100000*np.tanh(((((((data[\"t_sum_act\"]) - ((6.00677633285522461)))) * ((((6.00677633285522461)) - (((data[\"pred_3\"]) - (data[\"t_sum_act\"]))))))) + (data[\"t_sum_act\"]))) +\n            0.100000*np.tanh(((((data[\"pred_1\"]) + (((((data[\"pred_1\"]) + (((((data[\"t_mean\"]) - ((14.10800457000732422)))) + (data[\"pred_0\"]))))) * 2.0)))) * 2.0)) +\n            0.100000*np.tanh((((((9.98417091369628906)) * 2.0)) * ((((8.10735034942626953)) * ((((9.98417091369628906)) * (((((data[\"pred_2\"]) - ((4.0)))) * 2.0)))))))) +\n            0.100000*np.tanh(((((((((((((data[\"t_sum_log\"]) - ((9.48249053955078125)))) + (-2.0))) + (data[\"t_sum_act\"]))) * 2.0)) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((((data[\"pred_2\"]) - (np.maximum(((data[\"next_session_2\"])), ((np.maximum(((((data[\"visitNumber\"]) * (data[\"visitNumber\"])))), ((data[\"visitNumber\"]))))))))) * 2.0)) +\n            0.100000*np.tanh(((((((((data[\"t_sum_act\"]) + (((((((((data[\"t_sum_act\"]) - ((6.93721342086791992)))) * 2.0)) * 2.0)) * 2.0)))) * 2.0)) * 2.0)) * 2.0)) +\n            0.100000*np.tanh((((11.06935405731201172)) * (((((((data[\"t_sum_log\"]) - ((11.06935405731201172)))) + (np.where(data[\"pred_1\"]>0, 0.0, data[\"t_sum_log\"] )))) * 2.0)))) +\n            0.100000*np.tanh(((((np.where(((-3.0) + (data[\"pred_1\"]))>0, (6.0), -3.0 )) + (data[\"pred_3\"]))) - (data[\"visitNumber\"]))) +\n            0.100000*np.tanh((((((10.0)) * ((((((np.where(data[\"pred_1\"]>0, (2.85201859474182129), data[\"pred_0\"] )) + (data[\"pred_1\"]))/2.0)) + (-3.0))))) * 2.0)) +\n            0.100000*np.tanh(((((((((data[\"t_sum_log\"]) + (((-3.0) * 2.0)))) * 2.0)) * 2.0)) * ((((8.0)) - (data[\"t_sum_log\"]))))) +\n            0.100000*np.tanh(((((((((((((data[\"t_sum_act\"]) - (np.maximum((((6.0))), ((data[\"visitNumber\"])))))) * 2.0)) * 2.0)) + (data[\"next_session_1\"]))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((((((((data[\"t_sum_act\"]) - (((3.0) * 2.0)))) + ((0.43446072936058044)))) * ((9.0)))) * 2.0)) +\n            0.100000*np.tanh((((9.72239112854003906)) * (((np.where(data[\"pred_2\"] < -99998, data[\"pred_1\"], data[\"t_sum_log\"] )) - (np.maximum(((data[\"visitNumber\"])), (((9.72239112854003906))))))))) +\n            0.100000*np.tanh(((((((((((((data[\"t_sum_log\"]) - (np.maximum((((6.0))), ((data[\"visitNumber\"])))))) * 2.0)) * 2.0)) - (-2.0))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(np.minimum((((((data[\"t_median\"]) < ((7.85152149200439453)))*1.))), ((((((data[\"next_session_2\"]) + (((((data[\"pred_0\"]) - ((7.85152149200439453)))) * 2.0)))) * 2.0))))) +\n            0.100000*np.tanh(((((((((((data[\"t_sum_log\"]) - (np.maximum(((data[\"visitNumber\"])), ((((3.0) * 2.0))))))) * 2.0)) * 2.0)) + (3.0))) * 2.0)) +\n            0.100000*np.tanh((((14.69243335723876953)) * (((((data[\"pred_3\"]) - (((data[\"pred_0\"]) + (((data[\"geoNetwork_country\"]) + ((10.17979812622070312)))))))) + (data[\"pred_3\"]))))) +\n            0.100000*np.tanh(((((((((((((data[\"t_sum_act\"]) - ((((10.99480342864990234)) / 2.0)))) * 2.0)) * ((10.99802207946777344)))) + (data[\"t_sum_log\"]))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh((((((((10.0)) * (((data[\"pred_3\"]) - ((6.0)))))) + (3.0))) * ((12.68457317352294922)))) +\n            0.100000*np.tanh((((((6.0)) - (((data[\"pred_0\"]) - (data[\"t_median\"]))))) * (((((data[\"pred_0\"]) - ((7.13541793823242188)))) * ((8.68632888793945312)))))) +\n            0.100000*np.tanh(((((((np.minimum(((((data[\"t_sum_log\"]) - ((5.0))))), ((((data[\"next_session_2\"]) - (data[\"visitNumber\"])))))) * 2.0)) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((((((((data[\"t_sum_act\"]) * 2.0)) - (((data[\"pred_0\"]) - (data[\"pred_3\"]))))) - ((10.0)))) * ((10.0)))) +\n            0.100000*np.tanh((((13.06485366821289062)) * ((((((((13.06485366821289062)) * (((((data[\"t_sum_log\"]) - (-3.0))) - ((8.01604843139648438)))))) * 2.0)) * 2.0)))) +\n            0.100000*np.tanh(((((((data[\"t_sum_log\"]) - (np.maximum(((data[\"t_median\"])), ((np.maximum(((data[\"visitNumber\"])), (((((10.0)) - (data[\"t_sum_log\"]))))))))))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((((np.where(data[\"pred_3\"]<0, ((data[\"t_sum_log\"]) + (data[\"t_sum_log\"])), data[\"t_sum_log\"] )) - ((10.0)))) * ((5.26560354232788086)))) +\n            0.100000*np.tanh(((((((data[\"t_mean\"]) - (data[\"t_sum_log\"]))) + (((((data[\"t_sum_log\"]) - ((10.0)))) * ((11.74072933197021484)))))) * 2.0)) +\n            0.100000*np.tanh(((((((((data[\"t_sum_act\"]) * 2.0)) - ((10.21498489379882812)))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh((((((((10.75512409210205078)) * (((((data[\"t_sum_log\"]) - (np.tanh((data[\"pred_2\"]))))) - ((10.75512409210205078)))))) + ((8.73960781097412109)))) * 2.0)) +\n            0.100000*np.tanh((((14.71356868743896484)) * ((((((14.71356868743896484)) * (((data[\"pred_0\"]) + (((-3.0) * 2.0)))))) + (((-3.0) * 2.0)))))) +\n            0.100000*np.tanh((((9.81327152252197266)) * (((((((((7.16616725921630859)) > (data[\"t_mean\"]))*1.)) * (data[\"t_sum_act\"]))) + (((data[\"t_sum_act\"]) - ((9.76804924011230469)))))))) +\n            0.100000*np.tanh(((((data[\"t_sum_act\"]) + (((data[\"t_sum_log\"]) - (np.maximum(((((((data[\"totals_hits\"]) * 2.0)) + (data[\"t_sum_log\"])))), (((9.55896186828613281))))))))) * 2.0)) +\n            0.100000*np.tanh(((((((((((((data[\"t_sum_log\"]) * 2.0)) - ((10.0)))) - (data[\"geoNetwork_country\"]))) * 2.0)) * 2.0)) - (data[\"visitNumber\"]))) +\n            0.100000*np.tanh(((((data[\"t_sum_log\"]) - (np.where(((data[\"pred_1\"]) - (2.0))<0, (11.79721641540527344), ((data[\"visitNumber\"]) + (data[\"t_median\"])) )))) * 2.0)) +\n            0.100000*np.tanh((((((((((11.64218807220458984)) * (((data[\"pred_3\"]) - ((5.93939924240112305)))))) * 2.0)) - (-3.0))) * ((5.93939924240112305)))) +\n            0.100000*np.tanh((((4.71989488601684570)) * ((((((((4.71989488601684570)) * (((((data[\"t_sum_log\"]) - ((4.71989488601684570)))) * 2.0)))) + (data[\"pred_0\"]))) * 2.0)))) +\n            0.100000*np.tanh(((((((np.where(((data[\"t_sum_act\"]) - ((7.0)))<0, ((data[\"t_sum_log\"]) * 2.0), data[\"t_sum_act\"] )) - ((9.0)))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((((((((data[\"t_sum_log\"]) - ((10.06210994720458984)))) * ((13.34921360015869141)))) - (data[\"t_sum_log\"]))) - ((10.0)))) +\n            0.100000*np.tanh(((((((((data[\"t_sum_log\"]) * 2.0)) - ((8.0)))) * ((((7.0)) - (data[\"t_sum_log\"]))))) * ((8.0)))) +\n            0.100000*np.tanh(np.minimum(((((((((np.minimum(((((((data[\"t_mean\"]) - ((5.0)))) * 2.0))), ((data[\"trafficSource_source\"])))) * 2.0)) * 2.0)) * 2.0))), ((data[\"geoNetwork_metro\"])))) +\n            0.100000*np.tanh(np.minimum((((((((8.0)) * (((((data[\"t_sum_log\"]) * 2.0)) - ((8.0)))))) * 2.0))), (((((7.0)) - (data[\"t_sum_log\"])))))) +\n            0.100000*np.tanh(((((((-3.0) + (np.where(data[\"pred_2\"] < -99998, np.where(data[\"pred_1\"] < -99998, -3.0, data[\"pred_0\"] ), data[\"t_mean\"] )))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((((((((data[\"pred_0\"]) - (2.0))) - (np.where(data[\"pred_1\"]<0, data[\"totals_hits\"], data[\"pred_0\"] )))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((((((((((((data[\"pred_0\"]) * 2.0)) + (np.minimum(((data[\"pred_1\"])), ((data[\"pred_1\"])))))) - ((8.0)))) * 2.0)) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((((((((-2.0) * 2.0)) + (data[\"t_sum_log\"]))) * ((((6.0)) - (data[\"t_sum_log\"]))))) * ((6.22247934341430664)))) +\n            0.100000*np.tanh(((((((data[\"t_sum_log\"]) - (np.maximum(((np.maximum(((data[\"pred_0\"])), ((((((1.0) * 2.0)) * 2.0)))))), ((data[\"visitNumber\"])))))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((((((data[\"t_sum_log\"]) + (((np.where(data[\"pred_2\"]>0, -3.0, ((data[\"t_sum_act\"]) - ((6.0))) )) * 2.0)))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh((((14.27134418487548828)) * ((((((11.12297344207763672)) * (((((data[\"geoNetwork_continent\"]) - ((9.0)))) + (data[\"t_sum_log\"]))))) + (data[\"next_session_1\"]))))) +\n            0.100000*np.tanh(np.where(((data[\"pred_0\"]) + (((-2.0) * 2.0)))>0, data[\"pred_0\"], ((np.minimum(((-3.0)), ((data[\"pred_3\"])))) + (data[\"t_mean\"])) )) +\n            0.100000*np.tanh(((((((np.where(((-3.0) + (data[\"totals_hits\"]))<0, data[\"t_sum_act\"], 2.0 )) - ((4.0)))) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(np.minimum((((((4.68725061416625977)) - (((data[\"totals_hits\"]) - (-2.0)))))), ((np.minimum(((data[\"t_median\"])), ((((data[\"t_sum_log\"]) - ((4.68725061416625977)))))))))) +\n            0.100000*np.tanh(np.minimum(((((data[\"pred_0\"]) * ((12.75279808044433594))))), ((((((data[\"t_sum_act\"]) * (np.maximum(((data[\"t_sum_log\"])), ((data[\"pred_0\"])))))) - ((12.75279808044433594))))))) +\n            0.100000*np.tanh((((13.62804603576660156)) * (((((((((4.70133781433105469)) - ((9.57412528991699219)))) + (((((data[\"pred_1\"]) * 2.0)) * 2.0)))/2.0)) - (data[\"t_median\"]))))) +\n            0.100000*np.tanh(((((((np.minimum(((((((((data[\"t_sum_log\"]) + (-3.0))) * 2.0)) * 2.0))), ((data[\"totals_pageviews\"])))) * 2.0)) + (-3.0))) * 2.0)) +\n            0.100000*np.tanh(np.minimum((((((5.0)) * (((data[\"t_sum_act\"]) - ((((6.49275684356689453)) - (data[\"t_sum_act\"])))))))), (((((5.0)) - (data[\"pred_0\"])))))) +\n            0.100000*np.tanh((((((9.0)) * (((((data[\"t_median\"]) - ((9.0)))) - (data[\"visitNumber\"]))))) + (((data[\"t_sum_log\"]) / 2.0)))) +\n            0.100000*np.tanh(((((((((((((data[\"t_sum_log\"]) + (-3.0))) * 2.0)) + (((data[\"pred_0\"]) - (data[\"totals_hits\"]))))) * 2.0)) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((data[\"t_median\"]) + (((((((((((np.maximum(((data[\"t_median\"])), ((data[\"t_sum_log\"])))) - ((10.68563747406005859)))) * 2.0)) * 2.0)) * 2.0)) * 2.0)))) +\n            0.100000*np.tanh(((((((((-3.0) + (np.where(data[\"pred_12\"] < -99998, np.maximum(((data[\"t_mean\"])), ((data[\"pred_0\"]))), data[\"pred_12\"] )))) * 2.0)) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((((((((np.minimum(((data[\"pred_1\"])), ((((np.minimum(((2.0)), ((data[\"pred_2\"])))) - (data[\"pred_1\"])))))) * 2.0)) * 2.0)) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((np.minimum(((((np.where(data[\"geoNetwork_country\"]<0, data[\"t_sum_log\"], -3.0 )) - (3.0)))), ((((data[\"next_session_1\"]) - (data[\"visitNumber\"])))))) * 2.0)) +\n            0.100000*np.tanh(((((np.where(((-2.0) + (data[\"pred_1\"]))>0, -3.0, ((-3.0) + (data[\"t_sum_log\"])) )) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(np.minimum((((((5.0)) - (data[\"t_mean\"])))), ((((((data[\"t_sum_log\"]) - ((((5.0)) - (data[\"t_sum_log\"]))))) * 2.0))))) +\n            0.100000*np.tanh(((-2.0) + (((((((((data[\"pred_0\"]) + (-3.0))) * 2.0)) * 2.0)) + (((data[\"t_sum_log\"]) * (data[\"next_session_1\"]))))))) +\n            0.100000*np.tanh(((((((data[\"t_sum_log\"]) - (np.maximum(((2.0)), ((((((data[\"t_sum_log\"]) - (2.0))) * 2.0))))))) * ((12.37948131561279297)))) * 2.0)) +\n            0.100000*np.tanh(((data[\"t_sum_act\"]) - (np.maximum((((((4.0)) * ((((4.94181728363037109)) * ((((data[\"next_session_1\"]) > (data[\"next_session_2\"]))*1.))))))), (((4.0))))))) +\n            0.100000*np.tanh(((((np.where(data[\"geoNetwork_continent\"]>0, -3.0, np.where(data[\"pred_2\"]>0, data[\"pred_2\"], ((data[\"t_sum_log\"]) * 2.0) ) )) * 2.0)) - ((6.66043043136596680)))) +\n            0.100000*np.tanh(((((data[\"t_sum_log\"]) - (np.maximum(((np.where(data[\"channelGrouping\"]<0, data[\"totals_pageviews\"], data[\"t_sum_log\"] ))), ((np.maximum(((data[\"pred_0\"])), ((3.0))))))))) * 2.0)) +\n            0.100000*np.tanh(((((((((np.minimum(((((data[\"t_sum_act\"]) + (-2.0)))), ((((data[\"geoNetwork_country\"]) * (data[\"pred_1\"])))))) * 2.0)) * 2.0)) * 2.0)) * 2.0)) +\n            0.100000*np.tanh(((((((data[\"pred_13\"]) * 2.0)) * ((((2.0) > (np.where(data[\"pred_13\"] < -99998, data[\"t_sum_log\"], data[\"pred_12\"] )))*1.)))) * ((14.28744792938232422)))) +\n            0.100000*np.tanh(np.where(data[\"pred_1\"]>0, ((np.where(data[\"pred_0\"]>0, (6.0), data[\"pred_1\"] )) - (data[\"t_median\"])), ((data[\"t_median\"]) - ((6.0))) )) +\n            0.100000*np.tanh(((((((((np.minimum(((data[\"t_sum_log\"])), ((data[\"totals_pageviews\"])))) * 2.0)) + ((((-3.0) + (-2.0))/2.0)))) * ((7.0)))) * 2.0)) +\n            0.100000*np.tanh(((np.where(data[\"pred_13\"] < -99998, data[\"t_mean\"], data[\"pred_13\"] )) + (((((np.maximum(((data[\"pred_12\"])), ((data[\"pred_13\"])))) * 2.0)) + (-3.0))))) +\n            0.100000*np.tanh(np.where(data[\"pred_29\"] < -99998, ((((((((-1.0) + (((data[\"t_sum_log\"]) * 2.0)))) * 2.0)) * 2.0)) + (-3.0)), -3.0 )) +\n            0.100000*np.tanh(((((((((data[\"pred_13\"]) * 2.0)) * 2.0)) * 2.0)) * ((((data[\"pred_200\"]) < (((data[\"t_sum_act\"]) * (((data[\"pred_13\"]) * 2.0)))))*1.)))) +\n            0.099658*np.tanh(((np.tanh((np.tanh((np.where((((((-3.0) / 2.0)) + (data[\"pred_12\"]))/2.0)>0, (3.79615640640258789), ((-3.0) / 2.0) )))))) * 2.0)) +\n            0.100000*np.tanh(((data[\"pred_254\"]) * (np.maximum(((((data[\"pred_254\"]) - (-3.0)))), (((((data[\"pred_29\"]) > (((data[\"pred_148\"]) - (data[\"pred_41\"]))))*1.))))))) +\n            0.099951*np.tanh(((data[\"pred_132\"]) - (np.where(data[\"pred_29\"]<0, ((data[\"pred_41\"]) - ((((((data[\"pred_132\"]) < (data[\"pred_29\"]))*1.)) * 2.0))), (4.58089542388916016) )))) +\n            0.099756*np.tanh(np.where(data[\"pred_12\"] < -99998, 0.0, np.where(data[\"pred_43\"] < -99998, data[\"pred_12\"], data[\"pred_254\"] ) )) +\n            0.099707*np.tanh(np.where(data[\"pred_29\"]>0, data[\"pred_148\"], ((np.minimum(((data[\"pred_29\"])), ((((((data[\"pred_132\"]) - (data[\"pred_41\"]))) * 2.0))))) - (data[\"pred_254\"])) )) +\n            0.099316*np.tanh(((np.where(np.where(data[\"pred_132\"] < -99998, data[\"pred_29\"], data[\"pred_254\"] ) < -99998, data[\"pred_29\"], ((data[\"pred_254\"]) - (data[\"pred_41\"])) )) - (data[\"pred_29\"]))) +\n            0.099951*np.tanh(np.where(data[\"pred_29\"]>0, -3.0, np.where(data[\"pred_132\"]>0, -3.0, ((data[\"pred_132\"]) - (np.minimum(((-3.0)), ((data[\"pred_29\"]))))) ) )) +\n            0.100000*np.tanh(((((((np.where(data[\"pred_11\"]<0, data[\"pred_254\"], ((data[\"pred_11\"]) - (data[\"pred_29\"])) )) - (data[\"pred_29\"]))) * 2.0)) * 2.0)) +\n            0.099609*np.tanh(((((data[\"pred_29\"]) - (((data[\"pred_148\"]) - (np.maximum(((((data[\"pred_254\"]) - (data[\"pred_29\"])))), ((data[\"pred_198\"])))))))) * (data[\"pred_254\"]))) +\n            0.099805*np.tanh((((((np.where(data[\"pred_132\"] < -99998, data[\"pred_41\"], 3.0 )) + (data[\"pred_132\"]))/2.0)) - (np.where(data[\"pred_29\"]<0, data[\"pred_41\"], (6.78871536254882812) )))) +\n            0.099853*np.tanh(((((np.minimum((((((data[\"pred_29\"]) > (data[\"pred_88\"]))*1.))), ((((((data[\"pred_111\"]) - (data[\"pred_41\"]))) - (data[\"pred_29\"])))))) * 2.0)) * 2.0)) +\n            0.099560*np.tanh(np.where(data[\"pred_29\"]>0, -2.0, np.where(data[\"pred_41\"]>0, -2.0, ((data[\"pred_153\"]) - (np.minimum(((data[\"pred_41\"])), ((-3.0))))) ) )) +\n            0.099707*np.tanh(((np.where(data[\"pred_29\"]>0, data[\"pred_251\"], (((data[\"pred_29\"]) > (data[\"pred_136\"]))*1.) )) + (((data[\"pred_132\"]) - (data[\"pred_41\"]))))) +\n            0.099463*np.tanh(((((data[\"pred_29\"]) - (data[\"pred_136\"]))) * ((((11.27190399169921875)) + (((data[\"pred_111\"]) + ((12.76537227630615234)))))))) +\n            0.100000*np.tanh(np.maximum(((((data[\"pred_132\"]) - ((((data[\"pred_251\"]) + (data[\"pred_13\"]))/2.0))))), ((((((((((data[\"pred_13\"]) * 2.0)) * 2.0)) * 2.0)) * 2.0))))) +\n            0.099805*np.tanh(np.where(data[\"pred_29\"]>0, data[\"pred_251\"], ((data[\"pred_132\"]) - (np.where(data[\"pred_148\"] < -99998, data[\"pred_43\"], ((((data[\"pred_251\"]) * 2.0)) * 2.0) ))) )) +\n            0.099658*np.tanh(np.where(data[\"pred_29\"]>0, data[\"pred_254\"], np.where(data[\"pred_153\"] < -99998, ((data[\"pred_29\"]) - (data[\"pred_43\"])), ((data[\"pred_29\"]) - (data[\"pred_153\"])) ) )) +\n            0.099805*np.tanh(np.maximum(((((((data[\"pred_254\"]) * 2.0)) * 2.0))), ((((np.minimum(((data[\"pred_41\"])), ((((((data[\"pred_132\"]) / 2.0)) / 2.0))))) - (data[\"pred_41\"])))))) +\n            0.099756*np.tanh(np.where(data[\"pred_29\"]>0, data[\"pred_254\"], ((np.where(data[\"pred_41\"] < -99998, data[\"pred_29\"], ((data[\"pred_148\"]) - (-1.0)) )) - (data[\"pred_41\"])) )) +\n            0.099707*np.tanh(((data[\"pred_148\"]) - (np.where(data[\"pred_29\"]>0, (7.0), np.where(data[\"pred_148\"]>0, (7.0), data[\"pred_41\"] ) )))) +\n            0.099805*np.tanh(np.where(np.maximum(((data[\"pred_111\"])), ((data[\"pred_29\"])))>0, -3.0, ((data[\"pred_111\"]) - (np.minimum(((data[\"pred_41\"])), ((-3.0))))) )) +\n            0.100000*np.tanh(np.where(data[\"pred_61\"]>0, (9.0), ((data[\"pred_111\"]) - (data[\"pred_29\"])) )) +\n            0.099170*np.tanh(np.where(data[\"pred_29\"]<0, ((np.where(data[\"pred_41\"] < -99998, data[\"pred_29\"], data[\"pred_132\"] )) - ((((data[\"pred_41\"]) + (data[\"pred_251\"]))/2.0))), data[\"pred_254\"] )) +\n            0.099609*np.tanh(((((data[\"pred_29\"]) - (data[\"pred_153\"]))) * (((((((data[\"pred_29\"]) + (data[\"pred_41\"]))) - (data[\"pred_132\"]))) * (data[\"pred_61\"]))))) +\n            0.099609*np.tanh(np.where(data[\"pred_153\"]>0, -3.0, np.where(data[\"pred_29\"]>0, -3.0, ((data[\"pred_153\"]) - (np.minimum(((-3.0)), ((data[\"pred_43\"]))))) ) )) +\n            0.099609*np.tanh(((data[\"pred_29\"]) - (np.where(np.where(data[\"pred_29\"]<0, data[\"pred_41\"], data[\"pred_29\"] ) < -99998, data[\"pred_61\"], ((data[\"pred_61\"]) * (data[\"pred_200\"])) )))))\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e5c4d74271bf634a2c86e71f6cfa57b031c925d8"},"cell_type":"code","source":"maxval = np.log1p(trn_user_target['target']).max()\nmaxval","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"111a661252a42489f8af4266428021d467ff63dd"},"cell_type":"code","source":"print(mean_squared_error(np.log1p(trn_user_target['target']), GP1(gp_trn_users).clip(0,maxval)) ** .5)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"23071d1eeb1d04dd716e4129719c89688e869bfe"},"cell_type":"code","source":"a = GP1(gp_sub_users).clip(0,maxval).values","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"edde26c5db0bc83f322d3344791879cc1def7092"},"cell_type":"code","source":"sub_full_data['PredictedLogRevenue'] = a\nsub_full_data[['PredictedLogRevenue']].to_csv('gp1.csv', index=True)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c527ac8022398f2e7df105d9ed3ff40587e27e0a"},"cell_type":"code","source":"sub_full_data.PredictedLogRevenue.min()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b0e1ae33bb10e7ae9cfcd98178ffe91e935c92bb"},"cell_type":"code","source":"sub_full_data.PredictedLogRevenue.max()","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}