{"cells":[{"metadata":{"_uuid":"b6a0eb394a3deb1b79e237d914e14c9f545fa26d"},"cell_type":"markdown","source":"I use this Kernel like base https://www.kaggle.com/sudalairajkumar/simple-exploration-baseline-ga-customer-revenue."},{"metadata":{"trusted":true,"_uuid":"db03a64bc37de8783e96df40f12aa867a8f3b8c9"},"cell_type":"code","source":"import os\nimport json\nimport numpy as np\nimport pandas as pd\nfrom pandas.io.json import json_normalize\nfrom sklearn import preprocessing\n\n\ncolumnPredict = ['channelGrouping', 'date', 'visitId', 'visitNumber', 'visitStartTime', 'browser', 'deviceCategory', 'isMobile', 'operatingSystem', 'city', 'continent', 'country', 'metro', 'networkDomain', 'region', 'subContinent', 'bounces', 'hits', 'newVisits', 'pageviews', 'adContent', 'campaign', 'isTrueDirect', 'keyword', 'medium', 'source']\ndef saveData(train,test):\n    train.to_csv('trainCategorical.csv',index=False)\n    test.to_csv('testCategorical.csv',index=False)\ndef loadData():\n    train = pd.read_csv('trainCategorical.csv',low_memory=False)\n    test = pd.read_csv('testCategorical.csv',low_memory=False)\n    return train,test\n\n\ndef load_df(csv_path='train.csv', nrows=None):\n    JSON_COLUMNS = ['device', 'geoNetwork', 'totals', 'trafficSource']\n\n    df = pd.read_csv('../input/'+csv_path, dtype={'fullVisitorId': 'str'})\n\n    for column in JSON_COLUMNS:\n        df = df.join(pd.DataFrame(df.pop(column).apply(pd.io.json.loads).values.tolist(), index=df.index))\n\n    return df\n\ndef normalize(df):\n    min_max_scaler = preprocessing.MinMaxScaler()\n    x_scaled = min_max_scaler.fit_transform(df.values)\n    result = pd.DataFrame(x_scaled)\n    return result","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3b1d643f5f1c5a3a0daa31cb1ddd21cad6bf2ae7"},"cell_type":"code","source":"# parsing data\n\ndef parsingDt(fileName):\n    data = load_df(csv_path = fileName)\n    data = data.drop(columns=['adwordsClickInfo','referralPath'])\n    const_cols = [c for c in data.columns if data[c].nunique(dropna=False)==1 ]\n    data = data.drop(columns=const_cols)\n    return data\n    #data.to_csv(str(fileName) +'_f1.csv')\n\ntrain = parsingDt('train.csv')\ntrain = train.drop(columns=['campaignCode'])\nprint('TRAIN FINISH')\ntest = parsingDt('test.csv')\nprint('TEST FINISH')\n\n\nprint(list(train))\nprint(\"Variables not in test but in train : \", set(train.columns).difference(set(test.columns)))\nsaveData(train,test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c60ec886db64b30a772bb034aeaef7cf0490bad5"},"cell_type":"code","source":"# data conversion\n\nfrom sklearn import model_selection, preprocessing, metrics\ntrain,test = loadData()\ntrain[\"transactionRevenue\"].fillna(0, inplace=True)\ncat_cols = [\"channelGrouping\", \"browser\", \n            \"deviceCategory\", \"operatingSystem\", \n            \"city\", \"continent\", \n            \"country\", \"metro\",\n            \"networkDomain\", \"region\", \n            \"subContinent\", \"adContent\", \"campaign\",\n            \"keyword\", \"medium\", \n            \"source\",'isTrueDirect']\nfor col in cat_cols:\n    print(col)\n    lbl = preprocessing.LabelEncoder()\n    lbl.fit(list(train[col].values.astype('str')) + list(test[col].values.astype('str')))\n    train[col] = lbl.transform(list(train[col].values.astype('str')))\n    test[col] = lbl.transform(list(test[col].values.astype('str')))\n\nnum_cols = ['channelGrouping','visitId','visitNumber','browser','deviceCategory','isMobile','hits','newVisits','pageviews','adContent','campaign','isTrueDirect','keyword','medium','source','visitStartTime','bounces','operatingSystem','city','continent','country','networkDomain','region','subContinent',]\nfor col in num_cols:\n    train[col] = train[col].astype(float)\n    test[col] = test[col].astype(float)\n\nsaveData(train,test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9e04167fd52786212d265ca609a878372ef88e20"},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport datetime\ntrain,test = loadData()\n\n\ntrain_id = train[\"fullVisitorId\"].values\ntest_id = test[\"fullVisitorId\"].values\n\ndev_df = train[train['date']<=int(datetime.date(2017,5,30).strftime('%Y%m%d'))]\nval_df = train[train['date']>int(datetime.date(2017,5,30).strftime('%Y%m%d'))]\nYtrain = np.log1p(dev_df[\"transactionRevenue\"].values)\nYtest = np.log1p(val_df[\"transactionRevenue\"].values)\n\nXtrain = dev_df[columnPredict]\nXtest = val_df[columnPredict]\n\n\npredictX = test[columnPredict]\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bab0715de8163d8bcb0cad4d43f7d04034fd8ad4"},"cell_type":"code","source":"#regression models\nfrom sklearn import model_selection, preprocessing, metrics\nimport lightgbm as lgb\nfrom sklearn.svm import SVR\nfrom sklearn.metrics import mean_squared_error\nfrom lightgbm import LGBMRegressor\nfrom xgboost import XGBRegressor\nfrom sklearn.linear_model import LinearRegression\nfrom sklearn.ensemble import RandomForestRegressor\n\nxgb_params = {\n        'eval_metric':'rmse',\n        'objective': 'reg:linear',\n        'booster': 'gbtree',\n        'learning_rate': 0.02,\n        'max_depth': 21,\n        'min_child_weight': 53,\n        'gamma' : 1.31,\n        'alpha': 0.0,\n        'lambda': 0.5,\n        'subsample': 0.63,\n        'colsample_bytree': 0.051,\n        'colsample_bylevel': 0.51,\n        'n_jobs': -1,\n        'random_state': 345\n    }\n\n        \nlgb_params = {\n    'learning_rate': 0.03,\n    'metric': 'rmse',\n    \"num_leaves\" : 30,\n    \"min_child_samples\" : 90,\n    \"learning_rate\" : 0.02,\n    \"bagging_fraction\" : 0.9,\n    \"feature_fraction\" : 0.6,\n    \"bagging_frequency\" : 5,\n    \"bagging_seed\" : 2018,\n    \"verbosity\" : -1\n}\n\ndef sv(Regressor,resVal):\n    X_tr = np.dstack((Regressor['lgb'],Regressor['xgb'])).reshape((-1,2))\n    X_pr =np.dstack((resVal['lgb'],resVal['xgb'])).reshape((-1,2))\n    print(X_tr.shape)\n    print(X_pr.shape)\n    print(len(Regressor['tValue']))\n    reg = LinearRegression().fit(X_tr,Regressor['tValue'])\n    print(reg.score(X_tr, Regressor['tValue']))\n    return reg.predict(X_pr)\n\ndef run_lgb(train_X, train_y, val_X, val_y, test_X):\n    models = {'lgb': LGBMRegressor(**lgb_params, n_estimators = 500), \n              'xgb': XGBRegressor(**xgb_params, n_estimators = 400)}\n    \n    ResRegressor = {'tValue': np.array([]),\n                    'lgb': np.array([]), \n             'xgb': np.array([])}\n    \n    Yresult = {'lgb': np.array([]), \n             'xgb': np.array([])}\n    \n    for name in ['xgb', 'lgb']:\n        models[name].fit(train_X, train_y, eval_set = [(val_X, val_y)],early_stopping_rounds = 100, eval_metric = 'rmse', verbose = False)\n        val_pred = models[name].predict(val_X)\n        val_pred[val_pred<0] = 0\n        ResRegressor[name] = val_pred\n        print(np.sqrt(mean_squared_error(val_pred, val_y)))\n        result_pred = models[name].predict(test_X)\n        result_pred[result_pred < 0] = 0\n        Yresult[name] = result_pred\n    ResRegressor['tValue'] = val_y\n    return Yresult,ResRegressor\n        \n        \nYres,Regressor = run_lgb(Xtrain, Ytrain,Xtest, Ytest, predictX)\npred_test = sv(Regressor,Yres)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8ac94f2d412e40485ceee35f46ab146a1fee03d9"},"cell_type":"code","source":"sub_df = pd.DataFrame({\"fullVisitorId\":test_id})\nsample_submission = pd.read_csv('../input/sample_submission.csv')\npred_test[pred_test<0] = 0\nsub_df[\"PredictedLogRevenue\"] = np.expm1(pred_test)\nsub_df = sub_df.groupby(\"fullVisitorId\")[\"PredictedLogRevenue\"].sum().reset_index()\nsub_df[\"PredictedLogRevenue\"] = np.log1p(sub_df[\"PredictedLogRevenue\"])\n\nresult = pd.merge(sample_submission[['fullVisitorId']],sub_df, left_on='fullVisitorId', right_on='fullVisitorId', how='left')\nresult['PredictedLogRevenue'] = result['PredictedLogRevenue'].fillna(0)\nsub_df.columns = [\"fullVisitorId\", \"PredictedLogRevenue\"]\nresult.to_csv(\"LG.csv\", index=False)\n","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"trusted":false,"_uuid":"2529f0f1f5c4436965dbc37c24b8994d8e5de50a"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.5.3"}},"nbformat":4,"nbformat_minor":1}