因果表示学习跨域迁移 — 从源域提取不变因果特征用于目标域零样本适配
Skill-Causal-Representation-Transfer-Learning · 12-ML基础
1. 解决的问题
新市场冷启动期模型不准导致广告大量浪费——因果表示迁移从小样本中提取不变因果特征,使日本/欧洲新市场AUC从0.61提升至0.76,节省6-12个月成熟期广告浪费
2. 核心算法逻辑
反直觉洞察:在跨境电商场景中,我们常常面临"源域数据丰富、目标域数据稀缺"的问题——美国站积累了3年数据,但新开拓的日本站只有3个月数据,如何把美国站的预测模型迁移到日本站?传统迁移学习方法的失败点在于:它学的是统计相关性(spurious correlations),而非因果机制。比如"冬季+高价=高转化"在美国成立,但在日本可能不成立,因为背后的驱动因子不同。
3. 业务应用场景
- 业务问题:某母婴品牌在美国站有24个月数据(日均500订单),转化率预测模型AUC=0.82。新开日本站仅3个月数据(日均30订单),无法训练可靠模型。直接迁移美国模型效果差(AUC=0.61) - 数据要求:美国站用户行为序列(浏览/加购/购买)、日本站小样本数据、产品特征(价格/类目/评分) - 算法应用: 1. 使用CORAL对美国和日本特征分布做协方差对齐 2. 识别不变因果特征:价格弹性、评分影响、搜索相关性(这些在两个市场都有因果效应) 3. 域特异特征(日本:品牌信任度权重更高;美国:价格敏感度更高)→ 用少量日本数据微调 4. 最终模型在日本站AUC从0.61提升至0.76
场景B:新品类预测迁移(婴儿辅食→婴儿护肤)
- **业务问题**:辅食类目有丰富的需求预测数据,新进入护肤类目数据稀缺。类目间有共同的影响因子(季节性、促销响应、复购率结构) - **算法应用**:跨类目IRM,识别"母婴用户复购行为"这一不变因果特征,迁移辅食品类的用户生命周期模型到护肤品类 - **预期产出**:护肤品类LTV预测误差从35%降至18%,6个月内达到辅食品类模型水平
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- ROI 预估:新市场冷启动期(通常6-12个月)广告浪费减少40%,以日本站年广告预算$50万计,节省$20万;系统建设成本$8万,ROI≈250%
- 实施难度:⭐⭐⭐⭐☆(概念理解有门槛,但代码框架标准化;主要挑战是确定"哪些特征是不变的")
- 优先级:⭐⭐⭐☆☆(适合同时运营3+个国家市场的中大型卖家,单市场卖家暂缓)
- 适用规模:多市场卖家(3+个国家站点)、多品类扩张(从核心品类向新品类渗透)
- 数据依赖:源域完整行为数据(12个月+)、目标域小样本(1-3个月即可)
7. 代码模板
代码块数量:1 · 路径:未检测到
"""
因果表示学习跨域迁移
功能:CORAL域适配 + 域不变特征学习 + 跨市场/品类迁移
"""
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import roc_auc_score
from scipy.linalg import sqrtm
import warnings
warnings.filterwarnings('ignore')
def generate_multi_domain_data(seed: int = 42):
"""
生成跨域数据集(模拟美国→日本市场迁移)
不变因果特征: price_elasticity, review_score(两个市场都有效)
域特异特征: brand_trust(日本更重要), price_sensitivity(美国更重要)
"""
np.random.seed(seed)
def make_domain(n, domain='us', noise=0.1):
"""生成单域数据"""
# 不变特征(两个市场都有因果效应)
price_elasticity = np.random.normal(0, 1, n)
review_score = np.random.normal(0, 1, n)
# 域特异特征
if domain == 'us':
brand_trust = np.random.normal(-0.3, 1, n) # 美国品牌信任度权重低
price_sensitivity = np.random.normal(0.5, 1, n) # 美国价格敏感度高
else: # japan
brand_trust = np.random.normal(0.8, 1, n) # 日本品牌信任度权重高
price_sensitivity = np.random.normal(-0.2, 1, n) # 日本价格敏感度低
# 特征矩阵(4个特征)
X = np.column_stack([price_elasticity, review_score, brand_trust, price_sensitivity])
# 因果标签生成(转化=1)
# 不变因果效应:price_elasticity和review_score决定转化
# 域特异效应:brand_trust在日本有额外权重
if domain == 'us':
logit = 0.8 * price_elasticity + 0.9 * review_score + 0.2 * price_sensitivity
else:
logit = 0.8 * price_elasticity + 0.9 * review_score + 0.6 * brand_trust
prob = 1 / (1 + np.exp(-logit + noise * np.random.normal(0, 1, n)))
y = (prob > 0.5).astype(int)
return X, y
# 美国站:大样本
X_us, y_us = make_domain(2000, 'us')
# 日本站:小样本
X_jp_train, y_jp_train = make_domain(150, 'japan') # 训练用少量数据
X_jp_test, y_jp_test = make_domain(500, 'japan') # 测试用
return X_us, y_us, X_jp_train, y_jp_train, X_jp_test, y_jp_test8. 论文来源
- 2402.11748