{ "metadata": { "name": "", "signature": "sha256:9ee31b1ba23d6574c7a962640eb79c5527b3a92f67cc238fadd74a426f142714" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "#Predicting Student Performance\n", "\n", "###A data science experiment using data from the KDD 2010 Educational Data Mining Challenge\n", "\n", "The aim of this IPython Notebook is to show how we can use Python to build predictive algorithms that solve data science problems in the arena of education.\n", "\n", "**This notebook is still heavily under construction**" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "# Get the data: Algebra 2005-2006\n", "train_filepath = 'data/algebra0506/algebra_2005_2006_train.txt'\n", "test_filepath = 'data/algebra0506/algebra_2005_2006_test.txt'\n", "traindata = pd.read_table(train_filepath)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some more information the data format can be found on the [challenge website](https://pslcdatashop.web.cmu.edu/KDDCup/rules_data_format.jsp)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Inspect some of the training data\n", "traindata.head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
RowAnon Student IdProblem HierarchyProblem NameProblem ViewStep NameStep Start TimeFirst Transaction TimeCorrect Transaction TimeStep End TimeStep Duration (sec)Correct Step Duration (sec)Error Step Duration (sec)Correct First AttemptIncorrectsHintsCorrectsKC(Default)Opportunity(Default)
0 1 0BrbPbwCMz Unit ES_04, Section ES_04-1 EG4-FIXED 1 3(x+2) = 15 2005-09-09 12:24:35.0 2005-09-09 12:24:49.0 2005-09-09 12:25:15.0 2005-09-09 12:25:15.0 40 NaN 40 0 2 3 1 [SkillRule: Eliminate Parens; {CLT nested; CLT... 1
1 2 0BrbPbwCMz Unit ES_04, Section ES_04-1 EG4-FIXED 1 x+2 = 5 2005-09-09 12:25:15.0 2005-09-09 12:25:31.0 2005-09-09 12:25:31.0 2005-09-09 12:25:31.0 16 16NaN 1 0 0 1 [SkillRule: Remove constant; {ax+b=c, positive... 1~~1
2 3 0BrbPbwCMz Unit ES_04, Section ES_04-1 EG40 1 2-8y = -4 2005-09-09 12:25:36.0 2005-09-09 12:25:43.0 2005-09-09 12:26:12.0 2005-09-09 12:26:12.0 36 NaN 36 0 2 3 1 [SkillRule: Remove constant; {ax+b=c, positive... 2
3 4 0BrbPbwCMz Unit ES_04, Section ES_04-1 EG40 1 -8y = -6 2005-09-09 12:26:12.0 2005-09-09 12:26:34.0 2005-09-09 12:26:34.0 2005-09-09 12:26:34.0 22 22NaN 1 0 0 1 [SkillRule: Remove coefficient; {ax+b=c, divid... 1~~1
4 5 0BrbPbwCMz Unit ES_04, Section ES_04-1 EG40 2 -7y-5 = -4 2005-09-09 12:26:38.0 2005-09-09 12:28:36.0 2005-09-09 12:28:36.0 2005-09-09 12:28:36.0 118 118NaN 1 0 0 1 [SkillRule: Remove constant; {ax+b=c, positive... 3~~1
\n", "

5 rows \u00d7 19 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ " Row Anon Student Id Problem Hierarchy Problem Name \\\n", "0 1 0BrbPbwCMz Unit ES_04, Section ES_04-1 EG4-FIXED \n", "1 2 0BrbPbwCMz Unit ES_04, Section ES_04-1 EG4-FIXED \n", "2 3 0BrbPbwCMz Unit ES_04, Section ES_04-1 EG40 \n", "3 4 0BrbPbwCMz Unit ES_04, Section ES_04-1 EG40 \n", "4 5 0BrbPbwCMz Unit ES_04, Section ES_04-1 EG40 \n", "\n", " Problem View Step Name Step Start Time First Transaction Time \\\n", "0 1 3(x+2) = 15 2005-09-09 12:24:35.0 2005-09-09 12:24:49.0 \n", "1 1 x+2 = 5 2005-09-09 12:25:15.0 2005-09-09 12:25:31.0 \n", "2 1 2-8y = -4 2005-09-09 12:25:36.0 2005-09-09 12:25:43.0 \n", "3 1 -8y = -6 2005-09-09 12:26:12.0 2005-09-09 12:26:34.0 \n", "4 2 -7y-5 = -4 2005-09-09 12:26:38.0 2005-09-09 12:28:36.0 \n", "\n", " Correct Transaction Time Step End Time Step Duration (sec) \\\n", "0 2005-09-09 12:25:15.0 2005-09-09 12:25:15.0 40 \n", "1 2005-09-09 12:25:31.0 2005-09-09 12:25:31.0 16 \n", "2 2005-09-09 12:26:12.0 2005-09-09 12:26:12.0 36 \n", "3 2005-09-09 12:26:34.0 2005-09-09 12:26:34.0 22 \n", "4 2005-09-09 12:28:36.0 2005-09-09 12:28:36.0 118 \n", "\n", " Correct Step Duration (sec) Error Step Duration (sec) \\\n", "0 NaN 40 \n", "1 16 NaN \n", "2 NaN 36 \n", "3 22 NaN \n", "4 118 NaN \n", "\n", " Correct First Attempt Incorrects Hints Corrects \\\n", "0 0 2 3 1 \n", "1 1 0 0 1 \n", "2 0 2 3 1 \n", "3 1 0 0 1 \n", "4 1 0 0 1 \n", "\n", " KC(Default) Opportunity(Default) \n", "0 [SkillRule: Eliminate Parens; {CLT nested; CLT... 1 \n", "1 [SkillRule: Remove constant; {ax+b=c, positive... 1~~1 \n", "2 [SkillRule: Remove constant; {ax+b=c, positive... 2 \n", "3 [SkillRule: Remove coefficient; {ax+b=c, divid... 1~~1 \n", "4 [SkillRule: Remove constant; {ax+b=c, positive... 3~~1 \n", "\n", "[5 rows x 19 columns]" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's begin asking some basic questions of the data\n", "\n", "### How many students are interacting with the system?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Take the column of anonimized student IDs and count the number of unique entries\n", "print 'Number of students: ', len(np.unique(traindata['Anon Student Id']))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Number of students: " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "574\n" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### How long does it take a student to solve any problem step on average?" ] }, { "cell_type": "code", "collapsed": true, "input": [ "csd = traindata['Correct Step Duration (sec)']\n", "csd.describe()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "count 620129.000000\n", "mean 18.071478\n", "std 34.796694\n", "min 0.000000\n", "25% 5.000000\n", "50% 8.000000\n", "75% 18.000000\n", "max 1907.000000\n", "Name: Correct Step Duration (sec), dtype: float64" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "So ignoring all the students that did not solve a problem step correctly, the average duraction for any problem step was about 18 seconds.\n", "\n", "Let's histogram this data to see the distribution." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "hist = plt.hist(np.array(csd.dropna()),bins=100,normed=True,log=False,range=(0,100))\n", "plt.xlabel('Time to correct answer (sec)')\n", "plt.ylabel('Fraction')\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "counts, bins = hist[0], hist[1]\n", "cdf = np.cumsum(counts)\n", "plt.plot(bins[1::], cdf)\n", "plt.xlabel('Time to correct answer (sec)')\n", "plt.ylabel('Cumulative fraction')\n", "plt.axis((0,100,0,1.0))\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The histogram shows visually what mere statistics hints at. The distribution of students is heavily weighted towards those who are solving problems in under 20 seconds. The cumulative distribution function (CDF) shows that roughly 80% of successful students solve the problem within 20 seconds. After 40 seconds, 90% of successful students have finished the problem. Almost no students take longer than 80 seconds." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Completion time by problem\n", "\n", "OK, let's ask a slightly harder question: how are students doing problem by problem? The answer will take several parts.\n", "\n", "First, let's get the number of unique problems" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# The unique identifier for each problem is the 'Problem Name'\n", "problems = traindata['Problem Name']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "# Get just the uniques\n", "problems = np.unique(problems)\n", "print 'Number of unique problems: ', len(problems)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Number of unique problems: 1084\n" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "pmedian_times = {}\n", "for p in problems:\n", " pmedian_times[p] = traindata[traindata['Problem Name'] == p]['Correct Step Duration (sec)'].median()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "import operator" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "sorted_times = sorted(pmedian_times.iteritems(), key=operator.itemgetter(1), reverse=True)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "traindata.columns" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "Index([u'Row', u'Anon Student Id', u'Problem Hierarchy', u'Problem Name', u'Problem View', u'Step Name', u'Step Start Time', u'First Transaction Time', u'Correct Transaction Time', u'Step End Time', u'Step Duration (sec)', u'Correct Step Duration (sec)', u'Error Step Duration (sec)', u'Correct First Attempt', u'Incorrects', u'Hints', u'Corrects', u'KC(Default)', u'Opportunity(Default)'], dtype='object')" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "traindata['Step Name']" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ "0 3(x+2) = 15\n", "1 x+2 = 5\n", "2 2-8y = -4\n", "3 -8y = -6\n", "4 -7y-5 = -4\n", "5 -7y = 1\n", "6 7y+4 = 7\n", "7 7y = 3\n", "8 -5+9y = -6\n", "9 9y = -1\n", "10 -7-3x = -2\n", "11 -7-3x+7 = -2+7\n", "12 -3x = 5\n", "13 -3x/-3 = 5/-3\n", "14 -9 = 8y+9\n", "...\n", "809679 -4x = 5\n", "809680 -4x/-4 = 5/-4\n", "809681 x = 5/-4\n", "809682 0 = -1y-10\n", "809683 0+10 = -1y-10+10\n", "809684 10 = -1y-10+10\n", "809685 10 = -1y\n", "809686 10/-1 = -1y/-1\n", "809687 -10 = -1y/-1\n", "809688 -7+2x = 4\n", "809689 -7+2x+7 = 4+7\n", "809690 2x = 4+7\n", "809691 2x = 11\n", "809692 2x/2 = 11/2\n", "809693 -2+5x = 8\n", "Name: Step Name, Length: 809694, dtype: object" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "traindata.columns" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "Index([u'Row', u'Anon Student Id', u'Problem Hierarchy', u'Problem Name', u'Problem View', u'Step Name', u'Step Start Time', u'First Transaction Time', u'Correct Transaction Time', u'Step End Time', u'Step Duration (sec)', u'Correct Step Duration (sec)', u'Error Step Duration (sec)', u'Correct First Attempt', u'Incorrects', u'Hints', u'Corrects', u'KC(Default)', u'Opportunity(Default)'], dtype='object')" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "import sklearn" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "sklearn.__version__" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 20, "text": [ "'0.14.1'" ] } ], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }