{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":38760,"databundleVersionId":4493939,"sourceType":"competition"},{"sourceId":4436180,"sourceType":"datasetVersion","datasetId":2597726}],"dockerImageVersionId":30664,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"![6e4ceb9bf86ace8429004175729176b.png](attachment:fcfce32a-ce4d-47d0-a56d-dd0f0dcac5de.png)","metadata":{},"attachments":{"fcfce32a-ce4d-47d0-a56d-dd0f0dcac5de.png":{"image/png":"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"}}},{"cell_type":"markdown","source":"## <p style=\"font-family:JetBrains Mono; font-weight:normal; letter-spacing: 2px; color:#EC0010; font-size:140%; text-align:left;padding: 0px; border-bottom: 3px solid #EC0010\">Libraries</p>","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\n\nimport glob\n\n\nimport warnings\nwarnings.filterwarnings(\"ignore\")\n\nfrom datetime import datetime\n\nfrom tqdm import tqdm\n\ntype_labels = {'clicks':1, 'carts':2, 'orders':3}","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:07:05.146271Z","iopub.execute_input":"2024-06-08T08:07:05.147104Z","iopub.status.idle":"2024-06-08T08:07:06.373442Z","shell.execute_reply.started":"2024-06-08T08:07:05.147064Z","shell.execute_reply":"2024-06-08T08:07:06.372394Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## <p style=\"font-family:JetBrains Mono; font-weight:normal; letter-spacing: 2px; color:#EC0010; font-size:140%; text-align:left;padding: 0px; border-bottom: 3px solid #EC0010\">Data Loading</p>","metadata":{}},{"cell_type":"code","source":"def load(which):    \n    dfs = []\n\n    # 使用 glob 模块的 glob 函数来获取指定目录下所有符合模式的文件路径。这里的模式是 /kaggle/input/otto-chunk-data-inparquet-format/ 加上 which 参数和 _parquet/*，意味着它会查找所有以 _parquet 结尾的文件夹中的所有文件。\n    test_files = glob.glob('/kaggle/input/otto-chunk-data-inparquet-format/'+which+'_parquet/*')\n    \n    for e, chunk_file in enumerate(test_files):      # 枚举文件夹下所有文件\n        chunk = pd.read_parquet(chunk_file)\n        chunk.ts = (chunk.ts/1000).astype('int32')        # chunk.ts    ts为chunk下的一列，将其/1000后改为int32形式\n        chunk['type'] = chunk['type'].map(type_labels).astype('int8')   # type_labels = {'clicks':1, 'carts':2, 'orders':3} 将clicks,carts等字符串映射为整数1，2，3并改为int8类型\n        \n        dfs.append(chunk)\n\n        \n    return pd.concat(dfs).reset_index(drop=True) #.astype({\"ts\": \"datetime64[ms]\"})","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:07:06.375821Z","iopub.execute_input":"2024-06-08T08:07:06.376427Z","iopub.status.idle":"2024-06-08T08:07:06.385390Z","shell.execute_reply.started":"2024-06-08T08:07:06.376378Z","shell.execute_reply":"2024-06-08T08:07:06.383914Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#test_df = load('test')\ntrain_df = load('train')","metadata":{"_kg_hide-input":false,"_kg_hide-output":true,"execution":{"iopub.status.busy":"2024-06-08T08:07:06.387075Z","iopub.execute_input":"2024-06-08T08:07:06.387458Z","iopub.status.idle":"2024-06-08T08:08:05.373091Z","shell.execute_reply.started":"2024-06-08T08:07:06.387428Z","shell.execute_reply":"2024-06-08T08:08:05.370220Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:08:05.375909Z","iopub.execute_input":"2024-06-08T08:08:05.376353Z","iopub.status.idle":"2024-06-08T08:08:05.411827Z","shell.execute_reply.started":"2024-06-08T08:08:05.376317Z","shell.execute_reply":"2024-06-08T08:08:05.410613Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## <p style=\"font-family:JetBrains Mono; font-weight:normal; letter-spacing: 2px; color:#EC0010; font-size:140%; text-align:left;padding: 0px; border-bottom: 3px solid #EC0010\">Generation of small dataset</p>","metadata":{}},{"cell_type":"markdown","source":"## To reduce runtime, only consider data from the last 4 days as train_df.","metadata":{}},{"cell_type":"code","source":"datetime.strptime(\"2022-08-25 00:00:00\", \"%Y-%m-%d %H:%M:%S\").timestamp()","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:08:05.417107Z","iopub.execute_input":"2024-06-08T08:08:05.418137Z","iopub.status.idle":"2024-06-08T08:08:05.427046Z","shell.execute_reply.started":"2024-06-08T08:08:05.418090Z","shell.execute_reply":"2024-06-08T08:08:05.425411Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sum(train_df['ts']>=1661385600)   # 获得最近四天的数量","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:08:05.428664Z","iopub.execute_input":"2024-06-08T08:08:05.429059Z","iopub.status.idle":"2024-06-08T08:08:25.852709Z","shell.execute_reply.started":"2024-06-08T08:08:05.429023Z","shell.execute_reply":"2024-06-08T08:08:25.851601Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = train_df[train_df['ts']>=1661385600].reset_index(drop=True)   # 选择最近4天的数量","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:08:25.854786Z","iopub.execute_input":"2024-06-08T08:08:25.855257Z","iopub.status.idle":"2024-06-08T08:08:27.713951Z","shell.execute_reply.started":"2024-06-08T08:08:25.855218Z","shell.execute_reply":"2024-06-08T08:08:27.712955Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:08:27.715255Z","iopub.execute_input":"2024-06-08T08:08:27.715584Z","iopub.status.idle":"2024-06-08T08:08:27.728939Z","shell.execute_reply.started":"2024-06-08T08:08:27.715557Z","shell.execute_reply":"2024-06-08T08:08:27.727535Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df['datetime'] = train_df['ts'].apply(lambda x: datetime.fromtimestamp(x))     # 增加datatime列","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:08:27.730622Z","iopub.execute_input":"2024-06-08T08:08:27.731105Z","iopub.status.idle":"2024-06-08T08:09:11.997422Z","shell.execute_reply.started":"2024-06-08T08:08:27.731065Z","shell.execute_reply":"2024-06-08T08:09:11.996270Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df ","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:11.999033Z","iopub.execute_input":"2024-06-08T08:09:11.999497Z","iopub.status.idle":"2024-06-08T08:09:12.022595Z","shell.execute_reply.started":"2024-06-08T08:09:11.999455Z","shell.execute_reply":"2024-06-08T08:09:12.020622Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.shape","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:12.024762Z","iopub.execute_input":"2024-06-08T08:09:12.025355Z","iopub.status.idle":"2024-06-08T08:09:12.038036Z","shell.execute_reply.started":"2024-06-08T08:09:12.025310Z","shell.execute_reply":"2024-06-08T08:09:12.036778Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df['session'].nunique()   # nunique() 函数用于计算DataFrame列中不同值的数量。当你调用 train_df['session'].nunique() 时，你正在计算 train_df DataFrame中 session 列中的唯一值有多少个。","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:12.039547Z","iopub.execute_input":"2024-06-08T08:09:12.039937Z","iopub.status.idle":"2024-06-08T08:09:12.893062Z","shell.execute_reply.started":"2024-06-08T08:09:12.039904Z","shell.execute_reply":"2024-06-08T08:09:12.891921Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df['aid'].nunique()","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:12.894926Z","iopub.execute_input":"2024-06-08T08:09:12.895822Z","iopub.status.idle":"2024-06-08T08:09:13.611125Z","shell.execute_reply.started":"2024-06-08T08:09:12.895778Z","shell.execute_reply":"2024-06-08T08:09:13.609949Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:13.618045Z","iopub.execute_input":"2024-06-08T08:09:13.618413Z","iopub.status.idle":"2024-06-08T08:09:13.631376Z","shell.execute_reply.started":"2024-06-08T08:09:13.618382Z","shell.execute_reply":"2024-06-08T08:09:13.630177Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## <p style=\"font-family:JetBrains Mono; font-weight:normal; letter-spacing: 2px; color:#EC0010; font-size:140%; text-align:left;padding: 0px; border-bottom: 3px solid #EC0010\">Division of training set and validation set</p>","metadata":{}},{"cell_type":"markdown","source":"## Choose the last day as the validation set.","metadata":{}},{"cell_type":"code","source":"# 总共就四天，因此自然是28，27，26，25这四天\ntrain_df['datetime'].dt.day.unique()   # dt 是pandas中用于访问 datetime 列属性的属性访问器。.dt.day 则用于访问每个 datetime 对象的 day 属性，即日期中的天数部分。","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:13.632688Z","iopub.execute_input":"2024-06-08T08:09:13.633076Z","iopub.status.idle":"2024-06-08T08:09:14.620554Z","shell.execute_reply.started":"2024-06-08T08:09:13.633045Z","shell.execute_reply":"2024-06-08T08:09:14.619078Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df['day'] = train_df['datetime'].dt.day   # 增加day这一列","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:14.622078Z","iopub.execute_input":"2024-06-08T08:09:14.622532Z","iopub.status.idle":"2024-06-08T08:09:15.504661Z","shell.execute_reply.started":"2024-06-08T08:09:14.622493Z","shell.execute_reply":"2024-06-08T08:09:15.503616Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:15.505940Z","iopub.execute_input":"2024-06-08T08:09:15.506258Z","iopub.status.idle":"2024-06-08T08:09:15.521786Z","shell.execute_reply.started":"2024-06-08T08:09:15.506230Z","shell.execute_reply":"2024-06-08T08:09:15.520544Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_val_offline = train_df[train_df['day']==28].reset_index(drop=True)     # 选择第28天作为验证集\ndf_train_offline = train_df[train_df['day']<28].reset_index(drop=True)    # 其他的作为训练集","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:15.523667Z","iopub.execute_input":"2024-06-08T08:09:15.524520Z","iopub.status.idle":"2024-06-08T08:09:17.825807Z","shell.execute_reply.started":"2024-06-08T08:09:15.524473Z","shell.execute_reply":"2024-06-08T08:09:17.824652Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## <p style=\"font-family:JetBrains Mono; font-weight:normal; letter-spacing: 2px; color:#EC0010; font-size:140%; text-align:left;padding: 0px; border-bottom: 3px solid #EC0010\">Recommendation based on item popularity</p>","metadata":{}},{"cell_type":"markdown","source":"## Analyze item popularity based on different types of behavior.","metadata":{}},{"cell_type":"code","source":"aid_pop_sta = df_train_offline.groupby(['aid','type'],as_index=False)['session'].count()","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:17.827061Z","iopub.execute_input":"2024-06-08T08:09:17.827397Z","iopub.status.idle":"2024-06-08T08:09:21.350495Z","shell.execute_reply.started":"2024-06-08T08:09:17.827371Z","shell.execute_reply":"2024-06-08T08:09:21.349320Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train_offline","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:21.352074Z","iopub.execute_input":"2024-06-08T08:09:21.352498Z","iopub.status.idle":"2024-06-08T08:09:21.367938Z","shell.execute_reply.started":"2024-06-08T08:09:21.352464Z","shell.execute_reply":"2024-06-08T08:09:21.366715Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"aid_pop_sta\n","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:21.370056Z","iopub.execute_input":"2024-06-08T08:09:21.370517Z","iopub.status.idle":"2024-06-08T08:09:21.387061Z","shell.execute_reply.started":"2024-06-08T08:09:21.370477Z","shell.execute_reply":"2024-06-08T08:09:21.385885Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"aid_pop_sta.columns = ['aid','type','pop']","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:21.388781Z","iopub.execute_input":"2024-06-08T08:09:21.389167Z","iopub.status.idle":"2024-06-08T08:09:21.399802Z","shell.execute_reply.started":"2024-06-08T08:09:21.389136Z","shell.execute_reply":"2024-06-08T08:09:21.398700Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"aid_pop_sta","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:21.401126Z","iopub.execute_input":"2024-06-08T08:09:21.401465Z","iopub.status.idle":"2024-06-08T08:09:21.419538Z","shell.execute_reply.started":"2024-06-08T08:09:21.401437Z","shell.execute_reply":"2024-06-08T08:09:21.418154Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Obtain the top 200 most popular items.","metadata":{}},{"cell_type":"code","source":"aid_pop_sta = aid_pop_sta.sort_values(['type','pop'],ascending=False).reset_index(drop=True)     # 排序和重置索引","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:12:19.407984Z","iopub.execute_input":"2024-06-08T08:12:19.408376Z","iopub.status.idle":"2024-06-08T08:12:19.610008Z","shell.execute_reply.started":"2024-06-08T08:12:19.408344Z","shell.execute_reply":"2024-06-08T08:12:19.608759Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"aid_pop_sta","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:12:22.084074Z","iopub.execute_input":"2024-06-08T08:12:22.084465Z","iopub.status.idle":"2024-06-08T08:12:22.097447Z","shell.execute_reply.started":"2024-06-08T08:12:22.084434Z","shell.execute_reply":"2024-06-08T08:12:22.096150Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"top200_aid_click = list(aid_pop_sta.loc[aid_pop_sta['type']==1,'aid'][:200])\ntop200_aid_cart = list(aid_pop_sta.loc[aid_pop_sta['type']==2,'aid'][:200])\ntop200_aid_order = list(aid_pop_sta.loc[aid_pop_sta['type']==3,'aid'][:200])\n\n'''\n这里使用的 .loc 方法是pandas中用于基于标签的索引和选择数据的方法。.loc[aid_pop_sta['type']==1,'aid'] 表示选择 aid_pop_sta DataFrame中 type 列值等于1的行的 aid 列。然后，[:200] 表示从筛选后的结果中取前200行。\n'''","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:12:30.379143Z","iopub.execute_input":"2024-06-08T08:12:30.379543Z","iopub.status.idle":"2024-06-08T08:12:30.415836Z","shell.execute_reply.started":"2024-06-08T08:12:30.379512Z","shell.execute_reply":"2024-06-08T08:12:30.414292Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Obtain the historical behavior list of the target user. The users in the validation set are the target users.","metadata":{}},{"cell_type":"code","source":"target_users = list( df_val_offline['session'].unique() )\ndf_val_offline['session'].unique()    #   获得session中不同的数值，","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:12:32.474105Z","iopub.execute_input":"2024-06-08T08:12:32.474850Z","iopub.status.idle":"2024-06-08T08:12:32.853308Z","shell.execute_reply.started":"2024-06-08T08:12:32.474813Z","shell.execute_reply":"2024-06-08T08:12:32.852185Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(target_users)","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:12:34.653900Z","iopub.execute_input":"2024-06-08T08:12:34.654693Z","iopub.status.idle":"2024-06-08T08:12:34.662582Z","shell.execute_reply.started":"2024-06-08T08:12:34.654651Z","shell.execute_reply":"2024-06-08T08:12:34.661252Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"session_his = df_train_offline.loc[df_train_offline['session'].isin(target_users)].groupby(['session','type'],as_index=False)['aid'].agg(list)\n# 目的是收集特定用户（target_users）的会话历史中的aid值，并将这些值按会话和类型分组并聚合成列表。","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:12:43.224144Z","iopub.execute_input":"2024-06-08T08:12:43.224549Z","iopub.status.idle":"2024-06-08T08:13:02.727695Z","shell.execute_reply.started":"2024-06-08T08:12:43.224521Z","shell.execute_reply":"2024-06-08T08:13:02.726579Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"session_his   # 观察列表我们可以发现，同一给session会有多个aid值，也就是对应有个aid列表","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:13:02.729596Z","iopub.execute_input":"2024-06-08T08:13:02.729950Z","iopub.status.idle":"2024-06-08T08:13:02.747434Z","shell.execute_reply.started":"2024-06-08T08:13:02.729920Z","shell.execute_reply":"2024-06-08T08:13:02.746217Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"session_his['session'].nunique()","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:13:02.748908Z","iopub.execute_input":"2024-06-08T08:13:02.749380Z","iopub.status.idle":"2024-06-08T08:13:02.800102Z","shell.execute_reply.started":"2024-06-08T08:13:02.749340Z","shell.execute_reply":"2024-06-08T08:13:02.798988Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Only 558344 out of 1350502 target users have historical behavior.**","metadata":{}},{"cell_type":"code","source":"his_click_dict = dict(zip(session_his.loc[session_his['type']==1,'session'],session_his.loc[session_his['type']==1,'aid']))\nhis_cart_dict = dict(zip(session_his.loc[session_his['type']==2,'session'],session_his.loc[session_his['type']==2,'aid']))\nhis_order_dict = dict(zip(session_his.loc[session_his['type']==3,'session'],session_his.loc[session_his['type']==3,'aid']))","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:13:02.802487Z","iopub.execute_input":"2024-06-08T08:13:02.802835Z","iopub.status.idle":"2024-06-08T08:13:03.217332Z","shell.execute_reply.started":"2024-06-08T08:13:02.802804Z","shell.execute_reply":"2024-06-08T08:13:03.216190Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:13:03.218651Z","iopub.execute_input":"2024-06-08T08:13:03.219072Z","iopub.status.idle":"2024-06-08T08:13:03.484007Z","shell.execute_reply.started":"2024-06-08T08:13:03.219035Z","shell.execute_reply":"2024-06-08T08:13:03.482881Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Recommend to the target users based on item popularity, while excluding items that have appeared in the users' historical behavior records.","metadata":{}},{"cell_type":"code","source":"res = []\n\nfor each_session in tqdm(target_users):\n\n    if each_session in his_click_dict:\n        his_click_tmp = his_click_dict[each_session]\n        res.append([str(each_session)+'_clicks'] + [' '.join([str(x) for x in top200_aid_click if x not in his_click_tmp][:20])] )\n    else:\n        res.append([str(each_session)+'_clicks'] + [' '.join([str(x) for x in top200_aid_click][:20])])\n        \n        \n    if each_session in his_cart_dict:\n        his_cart_tmp = his_cart_dict[each_session]\n        res.append([str(each_session)+'_carts'] + [' '.join([str(x) for x in top200_aid_cart if x not in his_cart_tmp][:20])] )\n    else:\n        res.append([str(each_session)+'_carts'] + [' '.join([str(x) for x in top200_aid_cart][:20])])\n        \n    if each_session in his_order_dict:\n        his_order_tmp = his_order_dict[each_session]\n        res.append([str(each_session)+'_orders'] + [' '.join([str(x) for x in top200_aid_order if x not in his_order_tmp][:20])] )\n    else:\n        res.append([str(each_session)+'_orders'] + [' '.join([str(x) for x in top200_aid_order][:20])])\n    ","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:13:03.485305Z","iopub.execute_input":"2024-06-08T08:13:03.485629Z","iopub.status.idle":"2024-06-08T08:16:08.756269Z","shell.execute_reply.started":"2024-06-08T08:13:03.485600Z","shell.execute_reply":"2024-06-08T08:16:08.754795Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_res = pd.DataFrame(res)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(df_res)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"res_dict = dict(zip(df_res[0],df_res[1]))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"res_dict","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:21.534214Z","iopub.status.idle":"2024-06-08T08:09:21.534601Z","shell.execute_reply.started":"2024-06-08T08:09:21.534417Z","shell.execute_reply":"2024-06-08T08:09:21.534435Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## <p style=\"font-family:JetBrains Mono; font-weight:normal; letter-spacing: 2px; color:#EC0010; font-size:140%; text-align:left;padding: 0px; border-bottom: 3px solid #EC0010\">Evaluate performance</p>","metadata":{}},{"cell_type":"markdown","source":"这是验证集，也就是最后的答案，官方给出的输出结果，    上面刚刚求的res_dict 是根据热度推给用户的产品","metadata":{}},{"cell_type":"code","source":"# 这是验证集，也就是最后的答案，官方给出的输出结果，    上面刚刚求的res_dict 是根据热度推给用户的产品\nsession_items_val = df_val_offline.groupby(['session','type'],as_index=False)['aid'].agg(set)","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:21.535830Z","iopub.status.idle":"2024-06-08T08:09:21.536246Z","shell.execute_reply.started":"2024-06-08T08:09:21.536060Z","shell.execute_reply":"2024-06-08T08:09:21.536076Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"session_items_val ","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:21.538215Z","iopub.status.idle":"2024-06-08T08:09:21.538595Z","shell.execute_reply.started":"2024-06-08T08:09:21.538417Z","shell.execute_reply":"2024-06-08T08:09:21.538434Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"session_items_val['session'].nunique()","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:21.540238Z","iopub.status.idle":"2024-06-08T08:09:21.540635Z","shell.execute_reply.started":"2024-06-08T08:09:21.540451Z","shell.execute_reply":"2024-06-08T08:09:21.540467Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"res_dict","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:21.541910Z","iopub.status.idle":"2024-06-08T08:09:21.542298Z","shell.execute_reply.started":"2024-06-08T08:09:21.542121Z","shell.execute_reply":"2024-06-08T08:09:21.542137Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def getScore(df, type_, suffix):\n    df_tmp = df[df['type']==type_].reset_index(drop=True)\n    print(df_tmp)\n    score_Numerator = 0\n    score_Denominator = 0\n\n    for i,row in tqdm( df_tmp.iterrows(),total=len(df_tmp) ):\n        recom_tmp = [int(x) for x in res_dict[str(row['session'])+suffix].split(' ')]\n    \n        score_Numerator += len(row['aid'] & set(recom_tmp))\n        score_Denominator += min(20,len(row['aid']))\n        \n    return score_Numerator/score_Denominator","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:21.544545Z","iopub.status.idle":"2024-06-08T08:09:21.544936Z","shell.execute_reply.started":"2024-06-08T08:09:21.544738Z","shell.execute_reply":"2024-06-08T08:09:21.544752Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"score_click = getScore(session_items_val,1,'_clicks')","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:21.546181Z","iopub.status.idle":"2024-06-08T08:09:21.546573Z","shell.execute_reply.started":"2024-06-08T08:09:21.546378Z","shell.execute_reply":"2024-06-08T08:09:21.546393Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"score_cart = getScore(session_items_val,2,'_carts')","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:21.547791Z","iopub.status.idle":"2024-06-08T08:09:21.548216Z","shell.execute_reply.started":"2024-06-08T08:09:21.548023Z","shell.execute_reply":"2024-06-08T08:09:21.548039Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"score_order = getScore(session_items_val,3,'_orders')","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:21.550007Z","iopub.status.idle":"2024-06-08T08:09:21.550510Z","shell.execute_reply.started":"2024-06-08T08:09:21.550305Z","shell.execute_reply":"2024-06-08T08:09:21.550323Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"score_click * 0.1 + score_cart * 0.3 + score_order * 0.6","metadata":{"execution":{"iopub.status.busy":"2024-06-08T08:09:21.551629Z","iopub.status.idle":"2024-06-08T08:09:21.552040Z","shell.execute_reply.started":"2024-06-08T08:09:21.551829Z","shell.execute_reply":"2024-06-08T08:09:21.551845Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}