{"cells":[{"metadata":{},"cell_type":"markdown","source":"# The first 30 questions are special\n\nI found that almost all users solved the same content in the first 30 questions. Since the questions are given in order from part1 to part7, I presume that it is a test to judge the user's ability. The average correct answer rate for the first 30 questions is different from that for the 31st and subsequent questions."},{"metadata":{},"cell_type":"markdown","source":"## Table of Contents\n\n1. Data preparation\n2. Average correct answer rate for each attempt\n3. Content of the first 30 questions\n4. Histogram of correct answer rate"},{"metadata":{},"cell_type":"markdown","source":"# 1. Data preparation"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"dtypes_train = {\n    'row_id': 'int64',\n    'timestamp': 'int64',\n    'user_id': 'int32',\n    'content_id': 'int16',\n    'content_type_id': 'int8',\n    'task_container_id': 'int16',\n    'user_answer': 'int8',\n    'answered_correctly':'int8',\n    'prior_question_elapsed_time': 'float32',\n    'prior_question_had_explanation': 'boolean'\n}\n\ntrain = pd.read_csv('../input/riiid-test-answer-prediction/train.csv', dtype=dtypes_train)\ntrain = train.loc[train.content_type_id == 0, ['row_id', 'user_id', 'content_id', 'answered_correctly']]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"dtypes_questions = {\n    \"question_id\": \"int16\",\n    \"bundle_id\": \"int16\",\n    \"part\": \"int8\",\n    \"correct_answer\": \"int8\",\n    \"tags\": \"object\",\n}\n\nquestions = pd.read_csv('../input/riiid-test-answer-prediction/questions.csv', dtype=dtypes_questions)\n\npart = questions[['question_id','part']]\npart.set_index('question_id', inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train = train.merge(part, how='left', left_on='content_id', right_index=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train['attempt'] = train.groupby('user_id')['answered_correctly'].agg(['cumcount'])\ntrain.attempt += 1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# 2. Average correct answer rate for each attempt\n\nLet's look at the number of users and the correct answer rate for each attempt."},{"metadata":{"trusted":true},"cell_type":"code","source":"groupby_attempt = train.groupby('attempt')['answered_correctly'].agg(['count', 'mean'])\ngroupby_attempt","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"groupby_attempt.describe()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"From the graph of the correct answer rate, we can see that there is something in the first 30 questions."},{"metadata":{"trusted":true},"cell_type":"code","source":"groupby_attempt['mean'].plot()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"groupby_attempt['mean'][:60].plot()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# 3. Content of the first 30 questions\n\nAlmost all users solved the same content in the first 30 questions. The sequence of the first 30 questions's part is '1 1 1 2 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 7 7 7 7'. Some people skip the proficiency test and solve the contents they want to solve."},{"metadata":{"trusted":true},"cell_type":"code","source":"for i in range(1,31):\n    print('attempt_' + str(i))\n    print(train[train['attempt']==i].content_id.value_counts().head(3))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pd.set_option('display.max_columns', 30)\n\npivot_part = train[train['attempt']<=30].pivot(index='user_id', columns='attempt', values=['part'])\npivot_part.head(30)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"questions[\n        # 1-3  part1\n            (questions['question_id']==7900)\n          | (questions['question_id']==7876)\n          | (questions['question_id']==175)\n    \n        # 4  part2\n          | (questions['question_id']==1278)\n          \n        # 5-7 part3\n          | (questions['question_id']==2063)\n          | (questions['question_id']==2064)\n          | (questions['question_id']==2065)\n          \n        # 8-16 part4\n          | (questions['question_id']==3363)\n          | (questions['question_id']==3364)\n          | (questions['question_id']==3365)\n          \n          | (questions['question_id']==2946)\n          | (questions['question_id']==2947)\n          | (questions['question_id']==2948)     \n          \n          | (questions['question_id']==2593)\n          | (questions['question_id']==2594)\n          | (questions['question_id']==2595)      \n          \n        #17-22 part5\n          | (questions['question_id']==4492)\n          | (questions['question_id']==4120)\n          | (questions['question_id']==4696)   \n          | (questions['question_id']==6116)   \n          | (questions['question_id']==6173)   \n          | (questions['question_id']==6370)   \n    \n        #23-26 part6\n          | (questions['question_id']==6877)\n          | (questions['question_id']==6878)\n          | (questions['question_id']==6879)  \n          | (questions['question_id']==6880)   \n        \n        #27-30 part7\n          | (questions['question_id']==7216)\n          | (questions['question_id']==7217)\n          | (questions['question_id']==7218)\n          | (questions['question_id']==7219)\n    \n         ]","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# 4. Histogram of correct answer rate"},{"metadata":{"trusted":true},"cell_type":"code","source":"first30 = train[train['attempt']<=30]\nfirst30_summary = pd.DataFrame(first30.groupby('user_id')['answered_correctly'].count())\nfirst30_summary.columns = ['first30_part_all_count']\nfirst30_summary['first30_part_all_sum'] = pd.DataFrame(first30.groupby('user_id')['answered_correctly'].sum())\nfirst30_summary['first30_part_all_mean'] = pd.DataFrame(first30.groupby('user_id')['answered_correctly'].mean())\nfirst30_summary['first30_part1234_count'] = pd.DataFrame(first30[(first30['part']==1) | (first30['part']==2) | (first30['part']==3) | (first30['part']==4)].groupby('user_id')['answered_correctly'].count())\nfirst30_summary['first30_part1234_sum'] = pd.DataFrame(first30[(first30['part']==1) | (first30['part']==2) | (first30['part']==3) | (first30['part']==4)].groupby('user_id')['answered_correctly'].sum())\nfirst30_summary['first30_part1234_mean'] = pd.DataFrame(first30[(first30['part']==1) | (first30['part']==2) | (first30['part']==3) | (first30['part']==4)].groupby('user_id')['answered_correctly'].mean())\nfirst30_summary['first30_part567_count'] = pd.DataFrame(first30[(first30['part']==5) | (first30['part']==6) | (first30['part']==7)].groupby('user_id')['answered_correctly'].count())\nfirst30_summary['first30_part567_sum'] = pd.DataFrame(first30[(first30['part']==5) | (first30['part']==6) | (first30['part']==7)].groupby('user_id')['answered_correctly'].sum())\nfirst30_summary['first30_part567_mean'] = pd.DataFrame(first30[(first30['part']==5) | (first30['part']==6) | (first30['part']==7)].groupby('user_id')['answered_correctly'].mean())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"first30_summary","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import matplotlib.pyplot as plt\n\nfor column in first30_summary.columns:\n    fig = plt.figure(figsize=(5, 5))\n    fig.suptitle(column)\n    first30_summary[column].hist()\n    plt.show()","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}