集合:ML-零售业
一、赛题描述
赛题:安泰杯-跨境电商智能算法大赛
主办方:上海交通大学安泰经济与管理学院、阿里云智能天池平台、AliExpress
主页:https://tianchi.aliyun.com/competition/entrance/231718/introduction
背景
在我们开拓海外市场时往往会遭遇到用户习惯与国内不同造成国内的优秀策略难以在海外奏效等问题。即使成功开拓了某一国的市场,当需要进一步向更多国家扩张时,也会遇到不同国家的用户心智不统一的问题。
AliExpress是中国最大出口B2C电商平台,2010 年平台成立至今已过 8 年,高速发展,日趋成熟。我们覆盖全球 230 个国家和地区,支持世界 18 种语言站点,22 个行业囊括日常消费类目,商品备受海外消费者欢迎;海外装机量超过 6亿,入围全球应用榜单 TOP 10;目前的主要交易市场为俄、美、西、巴、法等国。
对于AliExpress来说,目前某些国家的用户群体比较成熟。这些成熟国家的用户在AliExpress尽享买买买之乐的同时,为我们沉淀了大量的该国用户的行为数据。这些沉淀下来的用户数据被我们挖掘利用后形成我们的推荐算法,用来更好的服务于该国用户。
但是还有一些待成熟国家的用户在AliExpress上的行为比较稀疏,对于这些国家用户的推荐算法如果单纯不加区分的使用全网用户的行为数据,可能会忽略这些国家用户的一些独特的心智;而如果只使用这些国家的用户的行为数据,由于数据过于稀疏,不具备统计意义,会难以训练出正确的模型。于是怎样利用已成熟国家的稠密用户数据和待成熟国家的稀疏用户数据,训练出对于待成熟国家用户的正确模型对于我们更好的服务待成熟国家用户具有非常重要的意义。
本次比赛给出若干日内来自成熟国家的部分用户的行为数据,以及来自待成熟国家的A部分用户的行为数据,以及待成熟国家的B部分用户的行为数据去除每个用户的最后一条购买数据,让参赛人预测B部分用户的最后一条行为数据。
二、数据集描述
数据说明
给出到参赛选手的数据 商品属性表: 数据中共涉及2,840,536个商品,对于其中大部分商品,我们都会给出该商品的类目id、店铺id以及加密价格,其中价格的加密函数f(x)为一个单调增函数。
训练数据: 给出xx国的用户的购买数据和yy国的A部分用户的购买数据。数据的整体统计信息如下:
国家 | 记录数 | 买家数 |
---|---|---|
xx | 10,635,642 | 670,631 |
yy | 2,232,867 | 138,678 |
测试数据:给出yy国的B部分用户的购买数据除掉最后一条。数据的整体统计信息如下:
国家 | 记录数 | 买家数 |
---|---|---|
yy | 166,832 | 11,398 |
商品属性表、训练数据、测试数据对应的文件列表为:item_attr, train和test。
数据格式: 无论是训练数据还是测试数据,都具有如下的格式:
buyer_country_id | buyer_admin_id | item_id | create_order_time | irank |
---|---|---|---|---|
xx | 817731 | 4033525 | 2018-06-12 07:12:58 | 1 |
xx | 817731 | 98120 | 2018-06-11 07:12:58 | 2 |
其中各字段含义如下:
- buyer_country_id: 买家国家id, 只有’xx’和’yy’两种取值
- buyer_admin_id: 买家id
- item_id: 商品id
- create_order_time: 订单创建时间
- irank: 每个买家对应的所有记录按照时间顺序的逆排序
数据集特点: 1)每个用户有至少7条购买数据; 2)测试数据中每个用户的最后一条购买数据所对应的商品一定在训练数据中出现过; 3)少量用户在两个国家有购买记录,评测中将忽略这部分记录;
要求选手提交的数据 关于yy国的B部分用户每个用户的最后一条购买数据的预测前30。
数据集版权许可协议
BY-NC-SA 4.0
https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans
三、解决方案样例
思路
挑战:待成熟国家用户数据稀疏,难以独立训练有效模型,直接使用全局数据忽略其独特性。 目标:利用成熟国家的稠密数据(源域)辅助训练,同时保留待成熟国家(目标域)的独特特征。
1、数据混合:将成熟国家(xx)和待成熟国家(yy)的用户数据合并,利用成熟国家的数据增强模型对稀疏数据的理解。
2、特征工程:提取用户行为、商品属性、时间序列等特征,为模型提供丰富的输入。
3、迁移学习(Transfer Learning) 预训练-微调(Pre-training & Fine-tuning): 步骤:在源域(成熟国家)数据上预训练模型,捕捉通用行为模式(如点击、购买偏好);在目标域数据上微调,适配本地特征。 优势:源域模型提供初始化参数,缓解目标域数据不足问题。 技术:使用领域自适应方法(如DANN)学习域不变特征,或通过适配器(Adapter)调整部分网络层。
4、跨域推荐(Cross-Domain Recommendation) 共享潜在空间(Shared Latent Space): 方法:将用户和项目嵌入到统一低维空间,源域与目标域共享部分嵌入参数,同时保留独有特征。 实现:通过矩阵分解(MF)或深度模型(如DeepCoNN)建模跨域用户-项目交互。
运行环境
外部库名称 | 版本号 |
---|---|
python | 3.12.3 |
pandas | 2.2.2 |
numpy | 1.26.4 |
源码结构
1. 读入数据集
item = pd.read_csv('./data/Antai_AE_round1_item_attr_20190626.csv')
train = pd.read_csv('./data/Antai_AE_round1_train_20190626.csv')
test = pd.read_csv('./data/Antai_AE_round1_test_20190626.csv')
2. 数据预处理
df = pd.concat([train.assign(is_train=1), test.assign(is_train=0)])
df['create_order_time'] = pd.to_datetime(df['create_order_time'])
df['date'] = df['create_order_time'].dt.date
df['day'] = df['create_order_time'].dt.day
df['hour'] = df['create_order_time'].dt.hour
df = pd.merge(df, item, how='left', on='item_id')
3. 数据探查
plt.rcParams['font.sans-serif'] = ['SimHei'] # 支持中文显示
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
plt.figure(figsize=(8,6))
sns.countplot(x='is_train', data = df, palette=['red', 'blue'], hue='buyer_country_id', order=[1, 0])
plt.xticks(np.arange(2), ('训练集', '测试集'))
plt.xlabel('数据文件')
plt.title('国家编号')
4. 预测用户购买行为
test = pd.read_csv('./data/Antai_AE_round1_test_20190626.csv')
tmp = test[test['irank']<=31].sort_values(by=['buyer_country_id', 'buyer_admin_id', 'irank'])[['buyer_admin_id', 'item_id', 'irank']]
sub = tmp.set_index(['buyer_admin_id', 'irank']).unstack(-1)
sub.fillna(5595070).astype(int).reset_index().to_csv('submit.csv', index=False, header=None)
上述输出文件submit.csv的数据示例可参见下表:
buyer_admin_id | top1_item_id | top2_item_id | top3_item_id |
---|---|---|---|
152 | 8410857 | 7937154 | 8472223 |
282 | 11721802 | 7665423 | 7665423 |
321 | 1461800 | 7379845 | 9243286 |
源码开源协议
GPL-v3
https://zhuanlan.zhihu.com/p/608456168