{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"# this Notebook uses a simple logit estimator - no frills!\n# \n# 1) attempt: all the data but only most recent of duplicate content_id\n# Version 7 - ROC AUC = 0.746 pafile.txt\n#\n# 2) attempt: last 10 content_id but only first of duplicates\n# Version 8 - ROCAUC=0.716 pafile10.txt  (on train = 0.8239)\n# Version 36  ROCAUC=0.658 rocauc106    (on train = 0.7662)\n# Version 37  ROCAUC=0.715 better\n\n#\n# 3) attempt: last 20 content_id but only first of duplicates\n# Version 10 - ROCAUC=0.651 pafile20.txt  (on train = 0.8062)\n#\n# 4) attempt: p=0.5 to check ROC AUC computation\n# Version 12 ROCAUC=0.5\n#\n# 5) attempt: last 30 content_id but only first of duplicates\n# Version 13 - ROCAUC= 0.742 pafile30.txt  (on train =0.8005)\n#\n# 6) attempt: last 40 content_id but only first of duplicates\n# Version 14 - ROCAUC=0.746 pafile40.txt (on train = 0.7981)\n#\n# 7) attempt: last 50 content_id but only first of duplicates\n# Version 15 - ROCAUC= 0.749 pafile50.txt (on train = 0.7964 )\n#\n# 8) attempt: last 60 content_id but only first of duplicates\n# Version 16 - ROCAUC= 0.750 pafile60.txt (on train = 0.7952)\n#\n# 9) attempt: global variable for each n observations: 0.5, 0.6., \n# Version 17 - ROCAUC=0.5 size is 500K\n#\n# 10) attempt: last 70 content_id but only first of duplicates\n# Version 19 - ROCAUC=0.751  pafile70.txt (on train = 0.7943)\n#\n# 11) attempt: last 80 content_id but only first of duplicates\n# Version 20 - ROCAUC=0.752  pafile80.txt ()\n\n# Version 22: chasing elusive scoring error pa60 ia80 - error\n# Version 23: ia60 pa80 ROC = .752\n# Version 24: with the files! but p=0.6 ROC=0.5 - worked\n# Version 25: last 80 again - failed - trailing vbtab\n# Version 26: last 80 again ROC = .752\n# Version 27: last 70 again ROC = .751\n# Version 28: this was 70 again - Oops! - maybe with a loop :-( ROC = .751\n# version 29: \"last90\" is actually facets 80 +.02 for time: ROC = 0.663\n# version 30: last90win ROC = 0.753  (on train = 0.7936) slot10=0.7904, 0.7916\n# version 31: last100win ROC = 0.754 (on train = 0.7931)\n# version 38: better100 optimized ROCAUC ROC = 0.754 (on train = 0.7895)\n# version 32: last110win ROC = 0.754 (on train = 0.7927)\n# version 33: last120win ROC = 0.754\n# version 39: last130 ROC = 0.400 (plogit + ilogit)\n# version 40: last130 ROC = 0.755 (plogit-ilogit)\n# version 41: last140 ROC = 0.755\n# version 42: last150 ROC = 0.754\n# version 43: last135 ROC = 0.755\n# version 44: try 0 person at 0.5 instead of 0.6791 ROC = 0.755\n# version 45: only pafile135 ROC= 0.623\n# version 47: only iafile135 ROC= 0.705\n# version 48: < 0.67 -> 0.5 ROC = 0.697\n# version 49: iafile135+item discrimination cut-off at 0.67 :-( roc=0.696\n# version 50: iafile135+item discrimination roc= 0.756\n# version 51: cut-off at probability 0.25 = 0.754\n# version 52: iafile135+item discrimination + cut-off at 0.1 = 0.756\n# version 53: ipvalueall ROC = .704\n# version 54: ppvalueall ROC = .615 - suggests that person measures are about useless!\n# version 55: i*pvalueall ROC = .733\n# version 56: i+pvalueall/2 ROC = .737\n# version 57: 2*i + pvalueall/3 ROC = .734\n# version 58: 3*1 + pvalueall/4 ROC = .728\n# version 59: i+p*2 pvalueall/3 ROC = .715\n# version 60: i+pvaluel35/2 ROC = .744\n# version 61: iafileall40 + pafile135-1 ROC =\n# version 62: iafileall40 + pafile40x135 ROC =","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# do the housekeeping\n\nimport numpy as np\nimport pandas as pd\nimport bisect\nimport math\nimport numbers\nimport decimal\nimport riiideducation\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# global pafile\n\npersons = pd.read_csv(\"../input/persons/persons.txt\",sep=\"\\t\")\npafile = pd.read_csv(\"../input/pafile40x135/pafile40x135.txt\",sep=\"\\t\")\niafile = pd.read_csv(\"../input/iafileall40/iafileall40.txt\",sep=\"\\t\")\n\n# pafile.iat[0,0] = 0.5\n\nif pafile.iat[393656,0]!=393656:\n    print (\"bad pafile\")\n    exit\nif iafile.iat[13523,0]!=13523:\n    print (\"bad iafile\")\n    exit    \n\nprint (\"loaded\")\n\n# plogit = pafile['MEASURE'].tolist()\n# getting length of list \n#length = len(plogit) \n#for i in range(length): \n#    print(i, plogit[i])\n#    plogit[i] = plogit[i]+1\n#    print(i, plogit[i])\n\n# exit","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"env = riiideducation.make_env()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# compute a probability for each data line\n\ndef prob(user, content):\n    userseq = bisect.bisect_left(persons.iloc[:,1],user)\n    if persons.iat[userseq,1] != user: userseq=0\n    # global plogit    \n    plogit = pafile.iat[userseq,1]\n    # plogit = 0\n    # increments by .02 logits per response\n    # print (userseq, plogit[userseq])\n    # if userseq!=0: plogit[userseq] = plogit[userseq]+.02\n    ilogit = iafile.iat[content,1]\n    # idiscr = iafile.iat[content,2]\n    # ilogit = 0\n    # logit = plogit[userseq]-ilogit\n    \n    # rocauc\n    logit = (plogit-ilogit) # * idiscr\n    p= 1/(1+math.exp(-logit))\n    # if p < 0.1: p=0.1\n    # print(user,content, userseq,plogit[userseq],ilogit,logit,p)\n    # print(user,content, userseq,plogit,ilogit,logit,p)\n    # p = (plogit+(ilogit))/2\n    return p   \n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# go down the data lines\n\ndef mikes(df):\n    user = df['user_id']\n    content=df['content_id']\n    if df['content_type_id'] != 0: content = 0\n    p = prob (user, content)\n    df['timestamp']=p\n    return df['timestamp']\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# loop down the tests\n\niter_test = env.iter_test()\nfor (test_df, sample_prediction_df) in iter_test:\n     test_df['timestamp'] = test_df.apply(mikes,axis=1)\n     test_df=test_df.rename(columns = {'timestamp':'answered_correctly'})   \n     env.predict(test_df.loc[test_df['content_type_id'] == 0, ['row_id', 'answered_correctly']])      \n        \nprint (\"done - yeah!\")\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\n\n   \n","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}