BestBuy2014-2015用户搜索行为数据集和商品推荐样例

摘要:

合集:AI案例-NLP-零售
AI问题:语义相似度识别
数据集:BestBuy2014-2015用户搜索行为数据集
数据集价值:预测用户最有兴趣购买的商品
解决方案:商品相似度评测

一、问题描述

人们在关键字搜索时生成的数据可用于预测用户的兴趣。BestBuy消费电子公司已提供了来自用户的数百万次搜索的数据,时间范围覆盖了 2014年11月到2015年3月。这些数据可用于预测用户最有兴趣购买的Xbox游戏,这将用于向游客推荐游戏。

二、数据集内容

数据结构

文件train.csv和test.csv中的数据包含了用户在关键字搜索后,点击了哪些物品的信息。

train.csv的每一行描述了一个用户对单个物品的点击。它包含以下字段:

- user:用户ID
- sku:用户点击的库存保有单位(物品)
- category:sku所属的类别
- query:用户输入的搜索词
- click_time:点击sku的时间
- query_time:运行查询的时间

test.csv包含与train.csv相同的字段,除了sku。你的任务是估计在这些测试查询中点击了哪些sku。

说明:在网络搜索和电子商务领域中,SKU(Stock Keeping Unit,库存保有单位)是一种用于唯一标识库存中某个特定产品的编码。SKU通常由字母和数字组成,可以是产品型号、品牌、尺寸、颜色等信息的组合。SKU的目的是帮助商家跟踪库存、管理销售和进行产品分类。例如,在一个电子商务网站上,同一款T恤可能有不同的颜色和尺寸,每种颜色和尺寸的组合都有一个唯一的SKU。这样,商家可以更容易地了解哪些产品的需求较高,从而更好地管理库存和采购。当用户在网站上搜索商品时,搜索结果通常会显示与查询相关的SKU。例如,如果用户搜索“红色T恤”,搜索结果可能会显示具有红色SKU的T恤。

由于BestBuy数据库的内部结构,无法保证用户的点击是由给定查询的搜索结果产生的。我们所知道的是,用户在query_time进行了查询,然后在click_time点击了sku,但我们不知道点击是否来自搜索结果。click_time不应当比query_time晚超过五分钟。

此外,small_product_data.xml中还有关于这些xbox产品的信息。

数据样例

userskucategoryqueryclick_timequery_time
0001cd0d10bbc585c9ba287c963e00873d4c0bfd2032076abcat0701002gears of war22:56.121:42.9
00033dbced6acd3626c4b56ff5c55b8d699116819854804abcat0701002Gears of war35:42.235:33.2
00033dbced6acd3626c4b56ff5c55b8d699116812670133abcat0701002Gears of war36:08.735:33.2
00033dbced6acd3626c4b56ff5c55b8d699116819984142abcat0701002Assassin creed37:23.737:00.0
0007756f015345450f7be1df33695421466b7ce42541184abcat0701002dead island15:34.315:26.2
000878e35cb70ace315dbdbef54c22477066f07e3046066abcat0701002Rocksmith44:36.844:22.9

数据集版权许可协议

Creative Commons Attribution-NoDerivs 3.0 ( CC BY-ND 3.0 ).

三、解决方案样例

安装开发包

通过conda安装python (Version 3.12.x)、pandas、numpy等传统机器学习开发包。参考文章《安装传统机器学习开发包》。

工作流程

源码:BestBuy_Search_Query.ipynb

1、导入必要的库

import pandas as pd
import numpy as np
  • pandas 提供了高性能、易用的数据结构和数据分析工具。
  • numpy 用来存储和处理大型矩阵,并能够高效地进行矩阵运算。

2、读入训练数据集和测试数据集

trainDS = pd.read_csv('./train.csv')
testDS = pd.read_csv('./test.csv')
# 删除无意义的字段
# 只留下 (query,sku)两个字段
trainDF = trainDS.drop(['user','category','click_time','query_time'], axis = 1)

3、从训练数据集中提取数据字典

建立用户查询字段query和商品sku映射关系:

for row in trainDF.values:
    query = prepare(row[1])
    sku = row[0]

    try:
        mapping[query][sku] += 1
    except KeyError:
        try:
            mapping[query][sku] = 1
        except KeyError:
            mapping[query] = {}
            mapping[query][sku] = 1

4、将数据字典应用到测试数据集

在测试数据集testDS中,新增一字段recommend_sku定义为查询与推荐的商品的映射值。根据训练集合中(query,sku)的映射建立测试数据集中query和recommend_sku的对应关系。

# Adding a new column 'recommend_sku' to test dataset
testDS['recommend_sku'] = ''
testDS.head()

for row in testDS.values:
    test_case_number += 1
    query = prepare(row[2])

    if query in mapping:
        mapping_number += 1
        for sku in sorted(mapping[query], key = mapping[query].get, reverse = True):
            # print(sku)
            testDS.at[test_case_number - 1, 'recommend_sku'] = sku
            break

print("Used mapping in %s / %s (%s)" % (mapping_number, test_case_number, 1.0 * mapping_number / test_case_number))
# 输出
testDS.to_csv('output.csv', index = False)

运行结果

输出:在测试集合中使用了训练集合中(query,sku)的映射数据的命中率为93%。

Used mapping in 26277 / 28241 (0.9304557204065012)

output.csv

usercategoryqueryclick_timequery_timerecommend_sku
00025eb02b249434554fe2cacd8562db325df127abcat0701002child eden05:24.104:34.62628429
00033dbced6acd3626c4b56ff5c55b8d69911681abcat0701002Revelations38:14.737:58.42613542
000548d17532b70071b7d59edd4797aed1823c60abcat0701002Gears of war34:43.633:43.29854804
0006f15231a422156a9d005735d0969a5e5a0ac4abcat0701002batman14:48.414:33.72173065
000a16ce5371b0fb3ad0c7f6183a5476b434a95babcat0701002Assassins creed: revelations31:53.131:39.82613542
000a16ce5371b0fb3ad0c7f6183a5476b434a95babcat0701002Assassins creed: revelations33:07.031:39.82613542

源码许可协议

The MIT License (MIT)
Copyright (c) 2012 Zygmunt Zając

四、参考资料

zygmuntz/kaggle-bestbuy_small

五、获取案例套件

需要登录后才允许下载文件包。登录

发表评论