{"cells":[{"metadata":{"_uuid":"eaad8841d31cef4d426ebba40958a2a701f47f7d"},"cell_type":"markdown","source":"This uses target encoding to beat the benchmark just to see how far you can go ***without*** word vec stuff"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"collapsed":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nfrom sklearn.metrics import mean_squared_error","execution_count":1,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","collapsed":true,"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"def add_noise(series, noise_level):\n    return series * (1 + noise_level * np.random.randn(len(series)))\n\ndef target_encode(trn_series=None, \n                  tst_series=None, \n                  target=None, \n                  min_samples_leaf=1, \n                  smoothing=1,\n                  noise_level=0):\n    \"\"\"\n    Smoothing is computed like in the following paper by Daniele Micci-Barreca\n    https://kaggle2.blob.core.windows.net/forum-message-attachments/225952/7441/high%20cardinality%20categoricals.pdf\n    trn_series : training categorical feature as a pd.Series\n    tst_series : test categorical feature as a pd.Series\n    target : target data as a pd.Series\n    min_samples_leaf (int) : minimum samples to take category average into account\n    smoothing (int) : smoothing effect to balance categorical average vs prior  \n    \"\"\" \n    assert len(trn_series) == len(target)\n    assert trn_series.name == tst_series.name\n    temp = pd.concat([trn_series, target], axis=1)\n    # Compute target mean \n    averages = temp.groupby(by=trn_series.name)[target.name].agg([\"mean\", \"count\"])\n    # Compute smoothing\n    smoothing = 1 / (1 + np.exp(-(averages[\"count\"] - min_samples_leaf) / smoothing))\n    # Apply average function to all target data\n    prior = target.mean()\n    # The bigger the count the less full_avg is taken into account\n    averages[target.name] = prior * (1 - smoothing) + averages[\"mean\"] * smoothing\n    averages.drop([\"mean\", \"count\"], axis=1, inplace=True)\n    # Apply averages to trn and tst series\n    ft_trn_series = pd.merge(\n        trn_series.to_frame(trn_series.name),\n        averages.reset_index().rename(columns={'index': target.name, target.name: 'average'}),\n        on=trn_series.name,\n        how='left')['average'].rename(trn_series.name + '_mean').fillna(prior)\n    # pd.merge does not keep the index so restore it\n    ft_trn_series.index = trn_series.index \n    ft_tst_series = pd.merge(\n        tst_series.to_frame(tst_series.name),\n        averages.reset_index().rename(columns={'index': target.name, target.name: 'average'}),\n        on=tst_series.name,\n        how='left')['average'].rename(trn_series.name + '_mean').fillna(prior)\n    # pd.merge does not keep the index so restore it\n    ft_tst_series.index = tst_series.index\n    return add_noise(ft_trn_series, noise_level), add_noise(ft_tst_series, noise_level)","execution_count":2,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b20fa0b9a04ea50e7d45423eacb6b1bd949d57df"},"cell_type":"code","source":"train = pd.read_csv('../input/train.csv', index_col = \"item_id\",parse_dates = [\"activation_date\"])\ndealprobs = train.deal_probability.values\ntrain.drop('deal_probability',inplace=True,axis=1)\ntest = pd.read_csv('../input/test.csv', index_col = \"item_id\",parse_dates = [\"activation_date\"])\ntrain.insert(0,'dow',train.activation_date.dt.dayofweek)\ntest.insert(0,'dow',test.activation_date.dt.dayofweek)\ntrain.insert(0,'month',train.activation_date.dt.month)\ntest.insert(0,'month',test.activation_date.dt.month)\ntextfeats = [\"description\", \"title\"]\nfor cols in textfeats:\n    print(cols)\n    train[cols] = train[cols].astype(str) \n    train[cols] = train[cols].astype(str).fillna('totallyblank') # FILL NA\n    train[cols] = train[cols].str.lower() # Lowercase all text, so that capitalized words dont get treated differently\n    train[cols + '_num_chars'] = train[cols].apply(len) # Count number of Characters\n    train[cols + '_num_words'] = train[cols].apply(lambda comment: len(comment.split())) # Count number of Words\n    train[cols + '_num_unique_words'] = train[cols].apply(lambda comment: len(set(w for w in comment.split())))\n    train[cols + '_words_vs_unique'] = train[cols+'_num_unique_words'] / train[cols+'_num_words'] # Count Unique Words\n    \n    test[cols] = test[cols].astype(str) \n    test[cols] = test[cols].astype(str).fillna('totallyblank') # FILL NA\n    test[cols] = test[cols].str.lower() # Lowercase all text, so that capitalized words dont get treated differently\n    test[cols + '_num_chars'] = test[cols].apply(len) # Count number of Characters\n    test[cols + '_num_words'] = test[cols].apply(lambda comment: len(comment.split())) # Count number of Words\n    test[cols + '_num_unique_words'] = test[cols].apply(lambda comment: len(set(w for w in comment.split())))\n    test[cols + '_words_vs_unique'] = test[cols+'_num_unique_words'] / test[cols+'_num_words'] # Count Unique Words\ntrain.drop(['activation_date','image'],inplace=True,axis=1)\ntest.drop(['activation_date','image'],inplace=True,axis=1)\ntrain['deal_probability'] = dealprobs\ntest['deal_probability'] = 0","execution_count":3,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"d840335ff87184cc456aa3ad6ea8b04fdc53d763"},"cell_type":"code","source":"numerics = ['price',                                                                  \n            'item_seq_number',\n            'image_top_1',\n            'description_num_chars',\n            'description_num_words',\n            'description_num_unique_words',\n            'description_words_vs_unique',\n            'title_num_chars',\n            'title_num_words',\n            'title_num_unique_words',\n            'title_words_vs_unique'\n           ]\nntrainrows = train.shape[0]\nalldata = pd.concat([train,test])\nalldata[numerics] = alldata[numerics].fillna(-1)","execution_count":4,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6c132038bde2ff93cb48dc3e72385b503420821c"},"cell_type":"code","source":"for c in numerics:\n    print('Binning: ', c)\n    print('Min Value', alldata.loc[alldata[c]!=-1,c].min())\n    print('Max Value', alldata.loc[alldata[c]!=-1,c].max())\n    print('No Of NULLs:', alldata.loc[alldata[c].isnull()].shape[0])\n    print('No Of Uniques:', len(alldata.loc[alldata[c]!=-1,c].unique()))\n    if(len(alldata.loc[alldata[c]!=-1,c].unique())<=50):\n        print('Nothing to Do')\n    elif(alldata.loc[alldata[c]!=-1,c].min()==0):\n        alldata.loc[alldata[c]!=-1,c] = pd.cut(np.log1p(alldata.loc[alldata[c]!=-1,c]), 50, labels=False)\n    else:\n        alldata.loc[alldata[c]!=-1,c] = pd.cut(np.log(alldata.loc[alldata[c]!=-1,c]), 50, labels=False)\ntest = alldata[ntrainrows:]\ntrain = alldata[:ntrainrows]","execution_count":5,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3d3dc99ecd675fa4bcb151fcfc17e5e612e84d95"},"cell_type":"code","source":"tecols = ['category_name', 'city', 'description',\n          'description_num_chars', 'description_num_unique_words',\n          'description_num_words', 'description_words_vs_unique', 'dow',\n          'image_top_1', 'item_seq_number', 'month', 'param_1', 'param_2',\n          'param_3', 'parent_category_name', 'price', 'region', 'title',\n          'title_num_chars', 'title_num_unique_words', 'title_num_words',\n          'title_words_vs_unique', 'user_id', 'user_type']\n\ntrain = train.reset_index(drop=False)\ntest = test.reset_index(drop=False)\nfrom sklearn.model_selection import KFold\nkf = KFold(n_splits=5, shuffle=True)\nfor col in tecols:\n    print(col)\n    train['te_'+col] = 0.\n    test['te_'+col] = 0.\n    SMOOTHING = test[~test[col].isin(train[col])].shape[0]/test.shape[0]\n    _, test['te_'+col] = target_encode(train[col], \n                                      test[col], \n                                      target=train['deal_probability'], \n                                      min_samples_leaf=10,\n                                      smoothing=SMOOTHING,\n                                      noise_level=0.0)\n    for f, (vis_index, blind_index) in enumerate(kf.split(train.index)):\n        print(f)\n        _, train.loc[blind_index, 'te_'+col] = target_encode(train.loc[vis_index, col], \n                                                            train.loc[blind_index, col], \n                                                            target=train.loc[vis_index,'deal_probability'], \n                                                            min_samples_leaf=10,\n                                                            smoothing=SMOOTHING,\n                                                            noise_level=0.01)","execution_count":6,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"0db9dab589fb281fc856e9c4b3ff737d6cb2b563"},"cell_type":"code","source":"def Output(p):\n    return 1./(1.+np.exp(-p))\n\ndef GPI(data):\n    return Output(  0.100000*np.tanh(((((data[\"te_title\"]) + (np.tanh((np.tanh((((((data[\"te_param_1\"]) * ((14.27754878997802734)))) - ((7.0)))))))))) * ((11.44603633880615234)))) +\n                    0.100000*np.tanh(((((((data[\"te_title\"]) * (((data[\"te_param_1\"]) + (((data[\"te_param_1\"]) + ((14.26261806488037109)))))))) - ((7.32064056396484375)))) * ((4.60418081283569336)))) +\n                    0.100000*np.tanh((((((((9.0)) * (data[\"te_user_id\"]))) + ((((((((6.12634897232055664)) * (data[\"te_param_2\"]))) * 2.0)) - ((7.04345417022705078)))))) * 2.0)) +\n                    0.100000*np.tanh((((((((6.0)) * (((data[\"te_title\"]) + ((((((6.60653972625732422)) * (data[\"te_param_2\"]))) + (-3.0))))))) * 2.0)) * 2.0)) +\n                    0.100000*np.tanh((((((((((8.0)) * (data[\"te_param_1\"]))) * 2.0)) * 2.0)) - ((14.12178039550781250)))) +\n                    0.100000*np.tanh((((6.0)) * (((((((data[\"te_title\"]) * ((8.71852207183837891)))) - ((7.44896841049194336)))) - (((-3.0) - (1.0))))))) +\n                    0.100000*np.tanh(((np.minimum(((((((data[\"te_user_id\"]) * 2.0)) * 2.0))), (((((((((12.76275444030761719)) * 2.0)) * (data[\"te_param_2\"]))) - ((9.38495445251464844))))))) * 2.0)) +\n                    0.100000*np.tanh((((6.07989358901977539)) * (((((((13.99245452880859375)) * ((((-1.0) + (((data[\"te_title\"]) * 2.0)))/2.0)))) + (2.0))/2.0)))) +\n                    0.100000*np.tanh(((((((((data[\"te_user_id\"]) * 2.0)) + ((((((13.39045619964599609)) * (((data[\"te_param_1\"]) * 2.0)))) - ((9.0)))))) * 2.0)) * 2.0)) +\n                    0.100000*np.tanh(((-3.0) - ((12.04623603820800781)))) +\n                    0.100000*np.tanh((((10.53458595275878906)) * ((((10.0)) * ((((((((14.56688404083251953)) + ((14.56688404083251953)))) * (data[\"te_user_id\"]))) - ((9.01885128021240234)))))))) +\n                    0.100000*np.tanh(((np.where((((((((((0.35881170630455017)) > (data[\"te_user_id\"]))*1.)) / 2.0)) > (((data[\"te_param_3\"]) * 2.0)))*1.)>0, -3.0, (5.61410808563232422) )) * 2.0)) +\n                    0.099961*np.tanh((((((((((((data[\"te_param_2\"]) * ((-1.0*(((8.60091304779052734))))))) * 2.0)) * 2.0)) + ((8.60091590881347656)))/2.0)) * (((-2.0) * 2.0)))) +\n                    0.100000*np.tanh(((((((-3.0) - (((((-3.0) * (((np.maximum(((data[\"te_title\"])), ((data[\"te_category_name\"])))) * 2.0)))) * 2.0)))) * 2.0)) * 2.0)) +\n                    0.100000*np.tanh((((((((((10.62176132202148438)) * ((((((10.0)) * (data[\"te_category_name\"]))) * (data[\"te_param_2\"]))))) + (-3.0))) * 2.0)) * 2.0)) +\n                    0.100000*np.tanh(((((((((((data[\"te_title\"]) * ((6.93708467483520508)))) - (3.0))) + ((((10.0)) * (data[\"te_param_1\"]))))) * 2.0)) * 2.0)) +\n                    0.100000*np.tanh((((6.23275041580200195)) * (((((np.tanh((data[\"te_title\"]))) * 2.0)) - ((((data[\"te_param_1\"]) < (((data[\"te_parent_category_name\"]) * 2.0)))*1.)))))) +\n                    0.100000*np.tanh(((((((((np.maximum(((data[\"te_parent_category_name\"])), ((((data[\"te_title\"]) * 2.0))))) * ((10.58407497406005859)))) + (((-2.0) * 2.0)))) * 2.0)) * 2.0)) +\n                    0.100000*np.tanh(((((-3.0) - (((((data[\"te_param_2\"]) - (data[\"te_title\"]))) * ((14.98566627502441406)))))) * ((14.98566627502441406)))) +\n                    0.100000*np.tanh((((((((((10.0)) * ((((((14.12048912048339844)) * (data[\"te_param_1\"]))) + (-1.0))))) - ((9.0)))) * 2.0)) * 2.0)) +\n                    0.099941*np.tanh(np.where((((data[\"te_param_3\"]) > (data[\"te_image_top_1\"]))*1.)>0, -3.0, np.where((((data[\"te_title_num_words\"]) > (data[\"te_param_1\"]))*1.)>0, -3.0, 2.0 ) )) +\n                    0.099961*np.tanh(((((((((((((data[\"te_item_seq_number\"]) - ((((data[\"te_param_1\"]) < (data[\"te_title_num_chars\"]))*1.)))) * 2.0)) - (data[\"te_category_name\"]))) * 2.0)) * 2.0)) * 2.0)) +\n                    0.099902*np.tanh((((((np.tanh((data[\"te_price\"]))) < (data[\"te_param_3\"]))*1.)) - (np.where((((data[\"te_price\"]) < (data[\"te_param_1\"]))*1.)>0, 1.0, (10.0) )))) +\n                    0.099980*np.tanh((((((((data[\"te_item_seq_number\"]) / 2.0)) > (np.minimum(((data[\"te_category_name\"])), (((((data[\"te_item_seq_number\"]) > (((data[\"te_category_name\"]) / 2.0)))*1.))))))*1.)) * (-2.0))) +\n                    0.099687*np.tanh(((((-1.0) - (((np.minimum((((((data[\"te_image_top_1\"]) > (data[\"te_title\"]))*1.))), ((data[\"te_param_1\"])))) * ((-1.0*(((9.0))))))))) * 2.0)) +\n                    0.099980*np.tanh(np.where(((((0.13747933506965637)) > (((data[\"te_param_1\"]) * 2.0)))*1.)>0, ((-2.0) * 2.0), (((np.tanh((data[\"te_category_name\"]))) > (data[\"te_param_1\"]))*1.) )) +\n                    0.099980*np.tanh(((((data[\"te_param_1\"]) - (data[\"te_image_top_1\"]))) - ((((((np.maximum(((data[\"te_category_name\"])), ((data[\"te_price\"])))) > (((data[\"te_image_top_1\"]) * 2.0)))*1.)) * 2.0)))) +\n                    0.100000*np.tanh(((-3.0) * (((((0.06090761721134186)) > (np.minimum(((np.minimum(((((data[\"te_title\"]) - ((0.06090761721134186))))), ((data[\"te_param_2\"]))))), ((data[\"te_param_3\"])))))*1.)))) +\n                    0.100000*np.tanh((((((data[\"te_item_seq_number\"]) > (data[\"te_param_2\"]))*1.)) - ((((((np.minimum(((data[\"te_item_seq_number\"])), ((data[\"te_param_2\"])))) < (((data[\"te_price\"]) / 2.0)))*1.)) * 2.0)))) +\n                    0.100000*np.tanh(((data[\"te_param_1\"]) - ((((((((((data[\"te_param_3\"]) + (data[\"te_parent_category_name\"]))/2.0)) < (data[\"te_param_2\"]))*1.)) + ((((data[\"te_param_1\"]) > (data[\"te_param_2\"]))*1.)))/2.0)))) +\n                    0.099961*np.tanh(np.where(((data[\"te_param_3\"]) - (((((((data[\"te_item_seq_number\"]) < (((data[\"te_image_top_1\"]) / 2.0)))*1.)) + (data[\"te_item_seq_number\"]))/2.0)))>0, (1.0), -3.0 )) +\n                    0.099980*np.tanh((((((-3.0) * ((((((data[\"te_description_num_chars\"]) < (np.tanh((data[\"te_param_3\"]))))*1.)) * 2.0)))) + ((((data[\"te_description_num_chars\"]) > (data[\"te_price\"]))*1.)))/2.0)) +\n                    0.099980*np.tanh(((data[\"te_title\"]) - ((((np.minimum(((data[\"te_price\"])), ((data[\"te_param_1\"])))) > (((((data[\"te_param_3\"]) * (data[\"te_price\"]))) + (data[\"te_param_3\"]))))*1.)))) +\n                    0.090232*np.tanh(((((((((((data[\"te_category_name\"]) + (((data[\"te_param_2\"]) * 2.0)))/2.0)) < (data[\"te_param_1\"]))*1.)) * 2.0)) + ((((data[\"te_param_2\"]) + (-1.0))/2.0)))) +\n                    0.100000*np.tanh((((((data[\"te_param_1\"]) < (data[\"te_param_2\"]))*1.)) - (((((0.13021591305732727)) > (np.minimum(((np.minimum(((data[\"te_param_3\"])), ((data[\"te_param_2\"]))))), ((data[\"te_parent_category_name\"])))))*1.)))) +\n                    0.099961*np.tanh(((((((((((data[\"te_description_num_unique_words\"]) * 2.0)) - ((((((data[\"te_title\"]) * 2.0)) < (data[\"te_description_num_unique_words\"]))*1.)))) - (data[\"te_param_2\"]))) * 2.0)) * 2.0)) +\n                    0.099922*np.tanh((-1.0*((np.maximum((((((data[\"te_item_seq_number\"]) < (((data[\"te_param_1\"]) - (data[\"te_category_name\"]))))*1.))), (((((data[\"te_param_1\"]) < (data[\"te_category_name\"]))*1.)))))))) +\n                    0.100000*np.tanh(((data[\"te_param_3\"]) - (np.where((((((np.minimum(((data[\"te_title\"])), ((data[\"te_item_seq_number\"])))) / 2.0)) > ((0.05008221790194511)))*1.)>0, 0.0, 3.0 )))) +\n                    0.100000*np.tanh((((((((np.tanh((((data[\"te_parent_category_name\"]) * 2.0)))) < (data[\"te_param_2\"]))*1.)) - ((((data[\"te_param_1\"]) < (((data[\"te_param_3\"]) / 2.0)))*1.)))) * 2.0)) +\n                    0.100000*np.tanh((((((((data[\"te_title\"]) < (((data[\"te_image_top_1\"]) / 2.0)))*1.)) * (-3.0))) - ((((data[\"te_price\"]) < (((data[\"te_image_top_1\"]) / 2.0)))*1.)))) +\n                    0.096855*np.tanh(((((((-1.0*(((((-1.0*(((0.61978352069854736))))) * (data[\"te_title\"])))))) > (data[\"te_param_1\"]))*1.)) - (data[\"te_title\"]))) +\n                    0.099785*np.tanh(((np.where(((data[\"te_description_num_chars\"]) - (data[\"te_title\"]))>0, data[\"te_item_seq_number\"], (((((data[\"te_description_num_chars\"]) > (data[\"te_price\"]))*1.)) - (data[\"te_title\"])) )) * 2.0)) +\n                    0.100000*np.tanh((((((-1.0*(((((data[\"te_item_seq_number\"]) < (np.minimum(((data[\"te_parent_category_name\"])), ((((data[\"te_image_top_1\"]) - (((data[\"te_title\"]) / 2.0))))))))*1.))))) * 2.0)) * 2.0)) +\n                    0.100000*np.tanh((((8.0)) * ((((2.0) < ((((8.0)) * (np.maximum(((data[\"te_price\"])), ((((data[\"te_param_1\"]) - (data[\"te_param_2\"])))))))))*1.)))) +\n                    0.100000*np.tanh(((data[\"te_category_name\"]) - ((((np.minimum(((np.tanh((np.minimum(((data[\"te_title\"])), ((data[\"te_description_num_unique_words\"]))))))), ((data[\"te_param_2\"])))) < (((data[\"te_category_name\"]) / 2.0)))*1.)))) +\n                    0.099980*np.tanh((((np.maximum(((data[\"te_price\"])), ((np.where((((data[\"te_title\"]) < (((data[\"te_parent_category_name\"]) / 2.0)))*1.)>0, data[\"te_parent_category_name\"], data[\"te_param_3\"] ))))) > ((0.33367761969566345)))*1.)) +\n                    0.099980*np.tanh((-1.0*(((((np.maximum(((data[\"te_param_3\"])), (((((((data[\"te_category_name\"]) < (((data[\"te_param_2\"]) / 2.0)))*1.)) / 2.0))))) > (((data[\"te_param_1\"]) * 2.0)))*1.))))) +\n                    0.099941*np.tanh((((-1.0*(((((np.minimum(((data[\"te_parent_category_name\"])), ((data[\"te_param_3\"])))) < (((np.tanh((np.minimum(((data[\"te_title\"])), ((data[\"te_param_1\"])))))) / 2.0)))*1.))))) * 2.0)) +\n                    0.099941*np.tanh((((-1.0*((((((((data[\"te_param_2\"]) > (((data[\"te_category_name\"]) * 2.0)))*1.)) > (((((data[\"te_param_1\"]) * 2.0)) * 2.0)))*1.))))) * ((6.0)))) +\n                    0.099961*np.tanh((((((((data[\"te_param_3\"]) + (data[\"te_parent_category_name\"]))) < (data[\"te_param_2\"]))*1.)) - ((((((np.tanh((data[\"te_image_top_1\"]))) / 2.0)) > (data[\"te_item_seq_number\"]))*1.)))) )\n\ndef GPII(data):\n    return Output(  0.100000*np.tanh((((((((((((5.0)) * (data[\"te_param_2\"]))) + (-3.0))) + (((data[\"te_image_top_1\"]) * 2.0)))) * ((13.97144412994384766)))) * 2.0)) +\n                    0.100000*np.tanh((((11.35549640655517578)) * ((((12.05701923370361328)) * ((-1.0*(((((7.0)) - (((data[\"te_param_1\"]) * ((13.80763912200927734))))))))))))) +\n                    0.100000*np.tanh(((((((((data[\"te_parent_category_name\"]) * 2.0)) * 2.0)) - ((6.28572225570678711)))) * (((((1.0) - (((data[\"te_param_2\"]) * 2.0)))) * 2.0)))) +\n                    0.100000*np.tanh((((((data[\"te_title\"]) + (((((((data[\"te_title\"]) * 2.0)) + (-1.0))) * ((6.45414733886718750)))))/2.0)) * ((12.60820579528808594)))) +\n                    0.100000*np.tanh((((((((11.88877964019775391)) * (((-1.0) - ((((-1.0*((data[\"te_param_2\"])))) * 2.0)))))) - (-2.0))) * 2.0)) +\n                    0.100000*np.tanh((((((((-1.0*((data[\"te_param_2\"])))) * ((((-1.0*((data[\"te_item_seq_number\"])))) - ((14.97994422912597656)))))) - ((6.0)))) * 2.0)) +\n                    0.100000*np.tanh((((-1.0*((((((((((((-2.0) - ((7.0)))) * 2.0)) * (data[\"te_title\"]))) * 2.0)) + ((13.60573673248291016))))))) * 2.0)) +\n                    0.100000*np.tanh((((((14.20429992675781250)) * (((np.maximum(((np.maximum(((data[\"te_param_2\"])), ((data[\"te_param_3\"]))))), ((data[\"te_price\"])))) * 2.0)))) - ((10.0)))) +\n                    0.100000*np.tanh(((((((np.maximum(((data[\"te_category_name\"])), ((data[\"te_user_id\"])))) * 2.0)) * ((12.44879245758056641)))) - ((10.0)))) +\n                    0.100000*np.tanh(((((((((data[\"te_param_1\"]) * ((((13.42785644531250000)) * 2.0)))) - ((8.58090019226074219)))) * ((((13.50540447235107422)) * 2.0)))) - (2.0))) +\n                    0.100000*np.tanh((((14.54305934906005859)) * (((((-2.0) + (((((-3.0) + (((data[\"te_user_id\"]) * ((12.95226860046386719)))))) * 2.0)))) * 2.0)))) +\n                    0.100000*np.tanh((((((10.0)) * (((-1.0) + (((((data[\"te_param_2\"]) + (data[\"te_param_2\"]))) * 2.0)))))) * 2.0)) +\n                    0.100000*np.tanh(((((((((data[\"te_user_id\"]) * ((10.73872756958007812)))) + (((((data[\"te_param_1\"]) * ((13.28394317626953125)))) - ((4.72308158874511719)))))) * 2.0)) * 2.0)) +\n                    0.100000*np.tanh((((((((-1.0*(((7.0))))) * ((((-1.0*(((7.0))))) * (data[\"te_title\"]))))) - ((7.56813335418701172)))) - ((4.47601795196533203)))) +\n                    0.100000*np.tanh((((4.0)) * ((((((((13.31715965270996094)) * (data[\"te_param_1\"]))) - ((4.50778961181640625)))) + ((((10.89849376678466797)) * (data[\"te_title\"]))))))) +\n                    0.099980*np.tanh(((((((((data[\"te_title\"]) * 2.0)) - ((((((data[\"te_parent_category_name\"]) * 2.0)) > (data[\"te_title\"]))*1.)))) * ((10.24160671234130859)))) - ((5.0)))) +\n                    0.100000*np.tanh((-1.0*(((((8.89357757568359375)) * (((((data[\"te_param_1\"]) * ((-1.0*((((-3.0) + ((14.58576679229736328))))))))) - (-2.0)))))))) +\n                    0.100000*np.tanh((((-1.0*(((14.20679950714111328))))) * ((((data[\"te_price\"]) > (((data[\"te_parent_category_name\"]) * (((data[\"te_parent_category_name\"]) - (data[\"te_price\"]))))))*1.)))) +\n                    0.100000*np.tanh(((((data[\"te_category_name\"]) * ((14.73734378814697266)))) + (((((((data[\"te_param_1\"]) * ((13.52457332611083984)))) + (-2.0))) * ((14.73734378814697266)))))) +\n                    0.100000*np.tanh(((np.minimum((((((((((((data[\"te_title\"]) * 2.0)) * 2.0)) + (-1.0))/2.0)) * ((8.89320945739746094))))), ((data[\"te_param_3\"])))) - (data[\"te_param_2\"]))) +\n                    0.100000*np.tanh(((np.where((((-2.0) < (((data[\"te_param_1\"]) * ((((-1.0*(((9.0))))) * 2.0)))))*1.)>0, -2.0, data[\"te_image_top_1\"] )) * 2.0)) +\n                    0.100000*np.tanh(((np.minimum(((((((data[\"te_param_1\"]) * ((14.75029754638671875)))) + (-2.0)))), (((-1.0*((((data[\"te_param_2\"]) * (data[\"te_param_2\"]))))))))) * 2.0)) +\n                    0.100000*np.tanh(((((((np.minimum(((((((data[\"te_param_1\"]) * ((12.21925258636474609)))) + (-2.0)))), ((data[\"te_image_top_1\"])))) - (data[\"te_param_2\"]))) * 2.0)) * 2.0)) +\n                    0.100000*np.tanh((((((((data[\"te_price\"]) < (data[\"te_param_3\"]))*1.)) - ((((((data[\"te_category_name\"]) < (np.tanh((data[\"te_parent_category_name\"]))))*1.)) * 2.0)))) - (data[\"te_param_2\"]))) +\n                    0.100000*np.tanh(((((data[\"te_image_top_1\"]) - (((((2.0)) > ((((((10.0)) * (np.minimum(((data[\"te_title\"])), ((data[\"te_param_1\"])))))) * 2.0)))*1.)))) * 2.0)) +\n                    0.100000*np.tanh((-1.0*((np.maximum((((((((((np.tanh((data[\"te_price\"]))) > (np.maximum(((data[\"te_param_3\"])), ((data[\"te_parent_category_name\"])))))*1.)) * 2.0)) * 2.0))), ((data[\"te_parent_category_name\"]))))))) +\n                    0.100000*np.tanh(((((((data[\"te_category_name\"]) - ((((np.maximum(((data[\"te_description_num_chars\"])), ((data[\"te_param_2\"])))) > ((((data[\"te_description_num_chars\"]) + (data[\"te_image_top_1\"]))/2.0)))*1.)))) * 2.0)) * 2.0)) +\n                    0.100000*np.tanh(((((((data[\"te_title_num_chars\"]) - ((((((np.minimum(((data[\"te_title\"])), ((data[\"te_param_2\"])))) * 2.0)) < (data[\"te_price\"]))*1.)))) * 2.0)) * 2.0)) +\n                    0.100000*np.tanh(((data[\"te_price\"]) - ((((np.minimum(((data[\"te_param_2\"])), ((data[\"te_image_top_1\"])))) < (np.minimum(((data[\"te_category_name\"])), ((np.minimum(((data[\"te_price\"])), ((data[\"te_param_1\"]))))))))*1.)))) +\n                    0.100000*np.tanh((-1.0*(((((((((np.minimum(((data[\"te_param_2\"])), ((data[\"te_title\"])))) * 2.0)) * 2.0)) > ((((data[\"te_price\"]) < (((data[\"te_param_2\"]) * 2.0)))*1.)))*1.))))) +\n                    0.100000*np.tanh((((((((((((data[\"te_param_1\"]) < (data[\"te_param_2\"]))*1.)) / 2.0)) - ((((((data[\"te_param_3\"]) / 2.0)) > (data[\"te_param_1\"]))*1.)))) * 2.0)) * 2.0)) +\n                    0.099980*np.tanh(((((data[\"te_title\"]) + ((((((((data[\"te_param_2\"]) > (((data[\"te_parent_category_name\"]) * 2.0)))*1.)) * 2.0)) - (((data[\"te_param_2\"]) * 2.0)))))) * 2.0)) +\n                    0.093593*np.tanh((((((((data[\"te_category_name\"]) < (np.minimum(((data[\"te_param_1\"])), ((data[\"te_parent_category_name\"])))))*1.)) - ((((((data[\"te_price\"]) / 2.0)) > (data[\"te_param_1\"]))*1.)))) * 2.0)) +\n                    0.100000*np.tanh((-1.0*(((((((((np.minimum(((data[\"te_param_2\"])), ((np.minimum(((data[\"te_title\"])), ((data[\"te_param_3\"]))))))) * ((7.38131237030029297)))) < ((0.44618737697601318)))*1.)) * 2.0))))) +\n                    0.099961*np.tanh((-1.0*((((((((((((data[\"te_image_top_1\"]) + (((data[\"te_param_2\"]) * (((data[\"te_parent_category_name\"]) / 2.0)))))/2.0)) > (data[\"te_param_3\"]))*1.)) * 2.0)) * 2.0))))) +\n                    0.099961*np.tanh(((((((((data[\"te_title_num_chars\"]) + (np.minimum(((data[\"te_category_name\"])), ((data[\"te_description_num_chars\"])))))/2.0)) > (data[\"te_param_2\"]))*1.)) - ((((data[\"te_title_num_chars\"]) > (data[\"te_description_num_chars\"]))*1.)))) +\n                    0.099980*np.tanh(((data[\"te_parent_category_name\"]) - ((((((((((data[\"te_image_top_1\"]) > (((np.minimum(((data[\"te_category_name\"])), ((data[\"te_price\"])))) * 2.0)))*1.)) * 2.0)) * 2.0)) * 2.0)))) +\n                    0.100000*np.tanh(((((np.minimum(((data[\"te_param_2\"])), (((((data[\"te_title\"]) < (data[\"te_description_num_unique_words\"]))*1.))))) - ((((data[\"te_title\"]) < ((((0.18750433623790741)) / 2.0)))*1.)))) * 2.0)) +\n                    0.099980*np.tanh((-1.0*(((((((((np.minimum(((data[\"te_category_name\"])), ((data[\"te_title\"])))) * 2.0)) < (data[\"te_image_top_1\"]))*1.)) + (np.minimum(((data[\"te_category_name\"])), ((data[\"te_title\"]))))))))) +\n                    0.099980*np.tanh((((((((np.maximum(((((data[\"te_category_name\"]) / 2.0))), ((data[\"te_title\"])))) * ((((data[\"te_param_1\"]) < (data[\"te_image_top_1\"]))*1.)))) > (data[\"te_image_top_1\"]))*1.)) * 2.0)) +\n                    0.100000*np.tanh((((((data[\"te_parent_category_name\"]) < (np.minimum((((((data[\"te_price\"]) + (((data[\"te_price\"]) / 2.0)))/2.0))), (((((data[\"te_description_num_chars\"]) > (data[\"te_price\"]))*1.))))))*1.)) * 2.0)) +\n                    0.099980*np.tanh((-1.0*(((((data[\"te_param_3\"]) < ((((((((((np.minimum(((data[\"te_param_3\"])), ((data[\"te_title\"])))) < (data[\"te_category_name\"]))*1.)) / 2.0)) / 2.0)) / 2.0)))*1.))))) +\n                    0.099961*np.tanh(((-3.0) * ((((np.minimum(((data[\"te_description\"])), ((((data[\"te_param_2\"]) * 2.0))))) < ((((((data[\"te_description\"]) / 2.0)) + (data[\"te_title_num_chars\"]))/2.0)))*1.)))) +\n                    0.100000*np.tanh((((10.0)) * ((-1.0*(((((np.minimum(((data[\"te_param_1\"])), ((((data[\"te_title\"]) * 2.0))))) > (np.tanh((((data[\"te_image_top_1\"]) * 2.0)))))*1.))))))) +\n                    0.100000*np.tanh((((np.maximum(((((data[\"te_param_1\"]) * (data[\"te_category_name\"])))), ((((data[\"te_price\"]) * ((((data[\"te_param_3\"]) > (data[\"te_param_1\"]))*1.))))))) > (data[\"te_param_2\"]))*1.)) +\n                    0.099980*np.tanh((-1.0*((((((((((((((data[\"te_param_3\"]) < (data[\"te_title_num_chars\"]))*1.)) + (data[\"te_param_3\"]))/2.0)) + (data[\"te_parent_category_name\"]))/2.0)) < (data[\"te_title_num_words\"]))*1.))))) +\n                    0.099101*np.tanh(((((data[\"te_param_2\"]) * ((((data[\"te_image_top_1\"]) > (data[\"te_title\"]))*1.)))) + ((((data[\"te_title\"]) > (((data[\"te_category_name\"]) + (data[\"te_param_2\"]))))*1.)))) +\n                    0.100000*np.tanh((((((-1.0*(((((np.minimum(((data[\"te_param_3\"])), ((data[\"te_param_1\"])))) < (np.maximum((((0.05219222232699394))), ((((data[\"te_param_3\"]) / 2.0))))))*1.))))) * 2.0)) * 2.0)) +\n                    0.099961*np.tanh(((((((((4.0)) * (data[\"te_price\"]))) > ((((data[\"te_price\"]) > (((data[\"te_title\"]) - (data[\"te_param_1\"]))))*1.)))*1.)) * 2.0)) +\n                    0.100000*np.tanh(((((((np.where((((((data[\"te_user_type\"]) > (data[\"te_description\"]))*1.)) * (data[\"te_description\"]))>0, data[\"te_description\"], -3.0 )) * 2.0)) * 2.0)) * 2.0)))\n\ndef GP(data):\n    return np.sqrt(GPI(data)*GPII(data))","execution_count":7,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7807b40d15760e07dcdc16bd590cf1800e591143"},"cell_type":"code","source":"np.sqrt(mean_squared_error(train.deal_probability,GP(train)))","execution_count":8,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"29bbde5b6babee6dcc6db4b4f01ee5e788678a42"},"cell_type":"code","source":"gpsub = pd.DataFrame()\ngpsub['item_id'] = test.item_id.values\ngpsub['deal_probability'] = GP(test).values\ngpsub.to_csv(\"gpsub.csv\",index=False)\ngpsub.head(10)","execution_count":9,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.5","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}