{"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 pandas as pd\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport seaborn as sns;sns,set()\nfrom warnings import filterwarnings\nfilterwarnings('ignore')\n\nimport lightgbm as lgb","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"trans_df=pd.read_csv('../input/santander-customer-transaction-prediction/train.csv')\ntrans_df","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"find outliers and replace them with maximum and minimum and after the changes on the columns add them as new columns","metadata":{}},{"cell_type":"code","source":"y=trans_df['target'].values\nx=trans_df.drop(['target','ID_code'],axis=1)\nprint('x.shape before IQR:',x.shape)\ndef IQR(df):    \n    for col in df.columns:\n        if col not in ('ID_code', 'target') :            \n            col_new = col + '_IQR'\n            df[col_new] = df[col]\n            q1, q3= np.percentile(df[col_new],[25,75])\n            IQR=q3-q1\n            max_IQR=q3+1.5*IQR\n            min_IQR=q1-1.5*IQR\n            df[col_new][df[col_new]>=max_IQR] = max_IQR\n            df[col_new][df[col_new]<=min_IQR] = min_IQR\n    return df\nX_df=IQR(x)\nprint('X_df.shape:',X_df.shape)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"boxplot to check outliers","metadata":{}},{"cell_type":"code","source":"sns.boxplot(X_df['var_1_IQR'])\nplt.show()","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"split columns without outliers for PCA because PCA is sensetive on outliers and its better do it on these columns","metadata":{}},{"cell_type":"code","source":"X_df=np.array(X_df)\nx_without_outlier=X_df[:,200:]\nx_without_outlier.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.decomposition import PCA\npca=PCA(n_components=100)\nx_pca=pca.fit_transform(x_without_outlier)\nx_pca.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"add x_pca to our data","metadata":{}},{"cell_type":"code","source":"x_total=np.concatenate((X_df,x_pca),axis=1)\nx=x_total\nx.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.set()\nplt.figure(figsize=(12,6))\n\n\nplt.bar(range(1,len(pca.explained_variance_ratio_) +1),\n       pca.explained_variance_ratio_,\n       align='center')\n\nplt.step(range(1,len(pca.explained_variance_ratio_) +1),\n        np.cumsum(pca.explained_variance_ratio_),\n        where='mid')\n;","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"do standardscaler on our data ","metadata":{}},{"cell_type":"code","source":"from sklearn import preprocessing\nstand=preprocessing.StandardScaler()\nx=stand.fit(x).transform(x.astype(float))\n","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nx_train,x_test,y_train,y_test=train_test_split(x,y,\n                                               train_size=0.8,stratify=y)\nprint('train set:',x_train.shape,y_train.shape)\nprint('test_set:',x_test.shape,y_test.shape)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"rrun a lightgbm algorithm","metadata":{}},{"cell_type":"code","source":"params = {\n    'boost_from_average':'false',\n    'boost': 'gbdt',\n    'feature_fraction': 1,\n    'learning_rate': 0.08,\n    'max_depth': -1,\n    'metric':'binary_logloss',\n    'num_leaves': 4,\n    'num_threads': 8,\n    'tree_learner': 'serial',\n    'objective': 'binary',\n    'reg_alpha': 2,\n    'reg_lambda': 0,\n    'verbosity': 1,\n    'max_bin':256,\n}\n\ngbm=lgb.LGBMClassifier(**params,verbose_eval=False)\ngbm.fit(x_train,y_train,eval_set=[(x_test, y_test)],\n        eval_metric='l1')\n","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"check the model with AUC","metadata":{}},{"cell_type":"code","source":"from sklearn.metrics import roc_auc_score\ny_pred_proba=gbm.predict_proba(x_test,num_iteration=gbm.best_iteration_)\nauc_score=roc_auc_score(y_test,y_pred_proba[:,1])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"auc_score","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}