{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Simple Classification Model\n# Author : Rohit Kumar Hansdah \n# Last Updated : 26 December 2020\n# Refrences : \n              \n              \n1. [https://www.kaggle.com/beletecheneke/xgboost-with-roc-curve-notebook-auprc-93](http://)              \n2. [https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html](http://)\n\n3. [https://www.kaggle.com/saurabhshahane/random-forest-and-xgboost-for-beginners](http://)\n\n4. [https://www.kaggle.com/andleebhayath/lgb-catboost-random-forest-and-xgboost](http://)"},{"metadata":{},"cell_type":"markdown","source":"# Importing Libraries"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nimport seaborn as sns\nimport matplotlib.pyplot as plt\nfrom sklearn.metrics import roc_curve, auc,recall_score,precision_score\nfrom sklearn.metrics import roc_auc_score","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Importing Dataset"},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"full_train = pd.read_csv(\"/kaggle/input/riiid-test-answer-prediction/train.csv\",nrows=1000000,low_memory=False)\ntest_df=pd.read_csv('../input/riiid-test-answer-prediction/example_test.csv')\nquestions = pd.read_csv('/kaggle/input/riiid-test-answer-prediction/questions.csv')\nlectures = pd.read_csv('/kaggle/input/riiid-test-answer-prediction/lectures.csv')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Exploratory Data Analysis"},{"metadata":{},"cell_type":"markdown","source":"# Working on Test Dataset"},{"metadata":{},"cell_type":"markdown","source":"# Handling Missing Data"},{"metadata":{"trusted":true},"cell_type":"code","source":"full_train = full_train.fillna(full_train.mean())\ntest_df = test_df.fillna(test_df.mean())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"full_train.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Working on Question Dataset"},{"metadata":{},"cell_type":"markdown","source":"# Handling Missing Data"},{"metadata":{"trusted":true},"cell_type":"code","source":"questions = questions.fillna(questions.mean())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"questions.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Most Useful Question Tags"},{"metadata":{"trusted":true},"cell_type":"code","source":"import plotly.express as px\ncheck = questions['tags'].str.split(' ').explode('tags').reset_index()\ncheck = check['tags'].value_counts().reset_index()\n\ncheck.columns = [\n    'question_tags', \n    'count'\n]\n\ncheck['question_tags'] = check['question_tags'].astype(str) + '-'\ncheck = check.sort_values(['count']).tail(5)\n\nfig = px.bar(\n    check, \n    x='count', \n    y='question_tags', \n    orientation='h', \n     title='Top 5 most useful tags', \n    width=500,\n    height=500 \n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"check=full_train[['user_id','content_id','content_type_id','prior_question_had_explanation']]\nbundle_id=[]\ncorrect_answer=[]\npart=[]\nprior_question_had_explanation=[]\nquestion_tags=[]\nfor i in range(0,check.shape[0]):\n    if(check['content_type_id'][i]==0):\n        bundle_id.append(questions['bundle_id'][check['content_id'][i]])\n        correct_answer.append(questions['correct_answer'][check['content_id'][i]])\n        part.append(questions['part'][check['content_id'][i]])\n        if(check['prior_question_had_explanation'][i]==True):\n            prior_question_had_explanation.append(1)\n        else:\n            prior_question_had_explanation.append(0)\n        s=questions['tags'][check['content_id'][i]]\n        temp=\"\"\n        score=0\n        for j in range(0,len(s)):\n            if s[j]==\" \" or j==len(s)-1:\n                if j==len(s)-1:\n                    temp+=s[j]\n                if temp==\"92\":\n                    score+=5\n                elif temp==\"38\":\n                    score+=4\n                elif temp==\"81\":\n                    score+=3\n                elif temp==\"29\":\n                    score+=2\n                elif temp==\"136\":\n                    score+=1\n                else:\n                    score+=0\n                temp=\"\"\n            else:\n                temp+=s[j]\n        question_tags.append(score)\n    else:\n        bundle_id.append(-1)\n        correct_answer.append(-1)\n        part.append(-1)\n        prior_question_had_explanation.append(-1)\n        question_tags.append(-1)\nfull_train['bundle_id']=bundle_id\nfull_train['correct_answer']=correct_answer\nfull_train['part']=part\nfull_train['prior_question_had_explanation']=prior_question_had_explanation\nfull_train['question_tags']=question_tags","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"c=test_df[['user_id','content_id','content_type_id','prior_question_had_explanation']]\nbundle_id=[]\ncorrect_answer=[]\npart=[]\nprior_question_had_explanation=[]\nquestion_tags=[]\nfor i in range(0,c.shape[0]):\n    if(c['content_type_id'][i]==0):\n        bundle_id.append(questions['bundle_id'][c['content_id'][i]])\n        correct_answer.append(questions['correct_answer'][c['content_id'][i]])\n        part.append(questions['part'][c['content_id'][i]])\n        if(c['prior_question_had_explanation'][i]==True):\n            prior_question_had_explanation.append(1)\n        else:\n            prior_question_had_explanation.append(0)\n        s=questions['tags'][check['content_id'][i]]\n        temp=\"\"\n        score=0\n        for j in range(0,len(s)):\n            if s[j]==\" \" or j==len(s)-1:\n                if j==len(s)-1:\n                    temp+=s[j]\n                if temp==\"92\":\n                    score+=5\n                elif temp==\"38\":\n                    score+=4\n                elif temp==\"81\":\n                    score+=3\n                elif temp==\"29\":\n                    score+=2\n                elif temp==\"136\":\n                    score+=1\n                else:\n                    score+=0\n                temp=\"\"\n            else:\n                temp+=s[j]\n        question_tags.append(score)\n    else:\n        bundle_id.append(-1)\n        correct_answer.append(-1)\n        part.append(-1)\n        prior_question_had_explanation.append(-1)\n        question_tags.append(-1)\ntest_df['bundle_id']=bundle_id\ntest_df['correct_answer']=correct_answer\ntest_df['part']=part\ntest_df['prior_question_had_explanation']=prior_question_had_explanation\ntest_df['question_tags']=question_tags","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"full_train = full_train[['timestamp','user_id','content_id','content_type_id','task_container_id','user_answer','prior_question_elapsed_time','prior_question_had_explanation','bundle_id','correct_answer','part','prior_question_had_explanation','question_tags','answered_correctly']]\nfull_train.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Correlation Heatmap"},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.heatmap(full_train.corr(), \n        xticklabels=full_train.corr().columns,\n        yticklabels=full_train.corr().columns)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Correlation matrix"},{"metadata":{"trusted":true},"cell_type":"code","source":"full_train.corr()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X = full_train.iloc[:, :-1].values\ny = full_train.iloc[:, -1].values","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Splitting the dataset into train and test "},{"metadata":{"trusted":true},"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,test_size=0.2)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# LGBM and Bagging Classifier"},{"metadata":{"_kg_hide-output":true,"trusted":true},"cell_type":"code","source":"from sklearn import model_selection \nfrom sklearn.ensemble import BaggingClassifier \nimport lightgbm as lgb\nkfold = model_selection.KFold(n_splits = 3)\n# initialize the base classifier \nbase_clf = lgb.LGBMClassifier()\n# no. of base classifier \nnum_trees = 100\n# bagging classifier \nmodel = BaggingClassifier(base_estimator = base_clf, n_estimators = num_trees)\nmodel.fit(X_train, y_train)\nmodel_pred=model.predict_proba(X_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.metrics import roc_auc_score\nprint('ROC-AUC Score of LGBM Classifier :')\nroc_auc_score(y_test, model_pred, multi_class=\"ovo\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Model Predictions on Train Set"},{"metadata":{"trusted":true},"cell_type":"code","source":"model.predict(X_test)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Working on Test Dataset"},{"metadata":{},"cell_type":"markdown","source":"# Creating Environment"},{"metadata":{"trusted":true},"cell_type":"code","source":"import riiideducation\nenv = riiideducation.make_env()\niter_test = env.iter_test()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df = test_df[['timestamp','user_id','content_id','content_type_id','task_container_id','user_answer','prior_question_elapsed_time','prior_question_had_explanation','bundle_id','correct_answer','part','prior_question_had_explanation','question_tags','answered_correctly']]\ntest_df.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Submission File"},{"metadata":{"trusted":true},"cell_type":"code","source":"for (test_df, sample_prediction_df) in iter_test:\n    features=['timestamp','user_id','content_id','content_type_id','task_container_id','user_answer','prior_question_elapsed_time','prior_question_had_explanation','bundle_id','correct_answer','part','prior_question_had_explanation','question_tags']\n    test_df['answered_correctly'] = model.predict(test_df[features])\n    cols_to_submission = ['row_id', 'answered_correctly', 'group_num']\n    env.predict(test_df.loc[test_df['content_type_id'] == 0, [cols_to_submission]])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Code Completed  ^_^"}],"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":4,"nbformat_minor":4}