{"cells":[{"metadata":{},"cell_type":"markdown","source":"## Notebook Set Up"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 5GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import random\nimport riiideducation\nfrom tensorflow import keras\nfrom keras.models import Sequential\nfrom keras.layers import Dense","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/riiid-test-answer-prediction/train.csv', skiprows=lambda i: i>0 and random.random() > 0.1)\nlectures = pd.read_csv('/kaggle/input/riiid-test-answer-prediction/lectures.csv')\nquestions = pd.read_csv('/kaggle/input/riiid-test-answer-prediction/questions.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.head(2)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Data Prep"},{"metadata":{"trusted":true},"cell_type":"code","source":"# question stats - question_success_rate, part_success_rate\n# user general stats - user_success_rate, user_part_success_rate, user_relative_success_rate, \n# user current stats - lectures_watched, prior_question_elapsed_time, prior_question_had_explanation, prior_group_answers_correct","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"user_general_stats = train[train['content_type_id']==0][['user_id', 'answered_correctly']].groupby('user_id').agg({'answered_correctly':\n                                  ['count', np.sum]})\nuser_general_stats.columns = user_general_stats.columns.droplevel()\nuser_general_stats = user_general_stats.reset_index().rename(columns={'sum': 'correct_answers', 'count': 'total_questions'})\nuser_general_stats['user_success_rate'] = user_general_stats['correct_answers']/user_general_stats['total_questions']\nuser_general_stats = user_general_stats[['user_id', 'user_success_rate']]\nuser_general_stats.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"question_stats = train[train['content_type_id']==0][['content_id', 'answered_correctly']].groupby('content_id').agg({'answered_correctly':\n                                  ['count', np.sum]})\nquestion_stats.columns = question_stats.columns.droplevel()\nquestion_stats = question_stats.reset_index().rename(columns={'sum': 'correct_answers', 'count': 'total_questions'})\nquestion_stats['question_success_rate'] = question_stats['correct_answers']/question_stats['total_questions']\nquestion_stats = question_stats[['content_id', 'question_success_rate']]\nquestion_stats.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"training = pd.merge(train[train['content_type_id']==0], user_general_stats, on='user_id', how='left')\ntraining = pd.merge(training, question_stats, on='content_id', how='left')\ntraining.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"mine = training[['user_success_rate', 'question_success_rate', 'answered_correctly']]\nmine = mine.groupby('answered_correctly').agg('mean').reset_index()\ndisplay(mine)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Model Build"},{"metadata":{"trusted":true},"cell_type":"code","source":"model = keras.Sequential()\nmodel.add(Dense(1, input_shape=(2,), activation='sigmoid'))\nmodel.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['binary_accuracy']) #auc","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X = training[['user_success_rate', 'question_success_rate']].values\ny = training[['answered_correctly']].values\nX.shape\ny.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.fit(\n  x=X,\n  y=y,\n  shuffle=True,\n  epochs=1,\n  batch_size=1024#16\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"eval = model.evaluate(x=X, y=y)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#test = pd.read_csv('/kaggle/input/riiid-test-answer-prediction/example_test.csv')\n\n#testing = pd.merge(test[test['content_type_id']==0], user_general_stats, on='user_id', how='left')\n#testing = pd.merge(testing, question_stats, on='content_id', how='left')\n#testing = testing.fillna(testing.median())\n#testing.head()\n\n#X_test = testing[['user_success_rate', 'question_success_rate']].values\n#X_test.shape\n\n#probs = model.predict(X_test)\n#probs = [y for x in probs for y in x]\n#preds = list(np.round(probs).astype(int))\n\n#test_ids = list(testing['row_id'].values)\n#group_nums = list(testing['group_num'].values)\n\n#output = pd.DataFrame({'row_id': test_ids, 'answered_correctly': list(probs)})#, 'group_num': group_nums})\n#output['answered_correctly'] = 0.5\n\n#output.to_csv(\"submission.csv\", index=False)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Submission"},{"metadata":{"trusted":true},"cell_type":"code","source":"env = riiideducation.make_env()\niter_test = env.iter_test()\nfor (test_df, sample_prediction_df) in iter_test:\n    test_df = pd.merge(test_df[test_df['content_type_id']==0], user_general_stats, on='user_id', how='left')\n    test_df = pd.merge(test_df, question_stats, on='content_id', how='left')\n    #test_df = test_df.fillna(test_df.median())\n    \n    X_test = test_df[['user_success_rate', 'question_success_rate']].values\n    probs = model.predict(X_test)\n    probs = [y for x in probs for y in x]\n    \n    test_df['answered_correctly'] = list(probs) #0.5\n    test_df['answered_correctly'] = test_df['answered_correctly'].fillna(0.5).round(1).astype(float)\n    env.predict(test_df.loc[test_df['content_type_id'] == 0, ['row_id', 'answered_correctly']])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df.dtypes","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df.head()","execution_count":null,"outputs":[]}],"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}