在电商推荐系统中,商品详情数据是构建精准推荐能力的核心原料。淘宝开放的商品详情 API 提供了商品标题、价格、类目、属性、销量、评价、库存、商家信息等全维度结构化数据,这些数据直接支撑推荐系统的召回、排序、特征工程三大核心环节。本文将结合实战逻辑与可运行代码,详解淘宝商品详情 API 数据在推荐全流程中的落地实践。
一、核心基础:淘宝商品详情 API 数据获取
推荐系统的前提是稳定获取高质量商品数据,我们先通过 Python 实现淘宝商品详情 API 的调用,标准化解析核心字段,为后续召回、排序、特征工程提供数据底座。
1.1 API 调用与数据解析代码
import requests
import json
import pandas as pd
# 淘宝商品详情API配置(模拟官方开放接口,实际使用替换为官方域名/密钥)
TAOBAO_API_URL = "https://eco.taobao.com/router/rest"
APP_KEY = "你的AppKey"
APP_SECRET = "你的AppSecret"
def get_taobao_item_detail(num_iid):
"""
调用淘宝商品详情API,获取单商品全量详情数据
:param num_iid: 淘宝商品ID
:return: 标准化后的商品特征字典
"""
params = {
"method": "taobao.item.get",
"app_key": APP_KEY,
"num_iid": num_iid,
"format": "json",
"v": "2.0"
}
try:
# 发送API请求
response = requests.get(TAOBAO_API_URL, params=params, timeout=10)
data = response.json()
# 解析核心商品详情字段(推荐系统高频使用字段)
item = data.get("item", {})
standard_item = {
"num_iid": item.get("num_iid"), # 商品ID
"title": item.get("title"), # 商品标题
"price": float(item.get("price", 0)), # 商品价格
"cid": item.get("cid"), # 商品类目ID
"category_name": item.get("category_name"), # 类目名称
"sales": int(item.get("sales", 0)), # 销量
"score": float(item.get("score", 0)), # 商品评分
"comment_num": int(item.get("comment_num", 0)), # 评价数
"props": item.get("props"), # 商品属性(材质、风格等)
"shop_type": item.get("shop_type"), # 店铺类型(天猫/淘宝C店)
"stock": int(item.get("stock", 0)) # 库存
}
return standard_item
except Exception as e:
print(f"商品{num_iid}获取失败:{str(e)}")
return None
# 实战:批量获取商品详情数据
item_ids = ["689123456789", "689234567890", "689345678901"]
item_data_list = [get_taobao_item_detail(iid) for iid in item_ids if get_taobao_item_detail(iid)]
# 转换为DataFrame,方便后续特征工程
item_df = pd.DataFrame(item_data_list)
print("商品详情基础数据:")
print(item_df.head())
1.2 核心数据价值
API 返回的商品详情数据,是推荐系统的原始特征池:
- 结构化特征:价格、销量、评分、类目、库存(直接用于排序);
- 文本特征:商品标题、属性(用于语义召回);
- 商业特征:店铺类型、销量(用于热门 / 优质商品过滤)。
二、召回阶段:基于商品详情 API 数据的精准候选集生成
召回是推荐系统的第一道关卡:从千万级商品库中快速筛选出几百个候选商品,核心目标是快、准、全。淘宝商品详情 API 的类目、属性、标题、销量数据,是实现高效召回的核心。
2.1 主流召回方式(基于 API 数据)
- 热门召回:基于 API 返回的
销量、评分筛选高热度商品; - 类目召回:基于用户历史浏览的
类目ID,召回同类目商品; - 语义召回:基于 API 返回的
商品标题、属性,做文本相似度召回; - 规则召回:基于
库存、店铺类型过滤无价值商品(如无库存、低质店铺)。
2.2 召回实战代码
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
# 1. 热门召回:基于销量+评分加权排序,召回TopN热门商品
def hot_recall(item_df, top_n=50):
# 加权得分:销量占60%,评分占40%
item_df["hot_score"] = item_df["sales"] * 0.6 + item_df["score"] * 0.4
# 过滤无库存商品
valid_items = item_df[item_df["stock"] > 0].sort_values(by="hot_score", ascending=False)
return valid_items.head(top_n)
# 2. 类目召回:根据用户偏好类目,召回同类目商品
def category_recall(item_df, user_like_cid, top_n=50):
category_items = item_df[item_df["cid"] == user_like_cid]
return category_items.head(top_n)
# 3. 语义召回:基于商品标题+属性的文本相似度召回
def semantic_recall(item_df, user_history_titles, top_n=50):
# 拼接商品文本特征(标题+属性)
item_df["text_feature"] = item_df["title"] + " " + item_df["props"].fillna("")
# TF-IDF构建文本向量
tfidf = TfidfVectorizer(max_features=1000, stop_words=["的", "是", "在"])
item_tfidf = tfidf.fit_transform(item_df["text_feature"])
# 用户历史浏览商品的文本均值向量
user_history_text = " ".join(user_history_titles)
user_vec = tfidf.transform([user_history_text])
# 计算相似度
sim_scores = cosine_similarity(user_vec, item_tfidf)[0]
item_df["sim_score"] = sim_scores
# 召回相似度TopN商品
return item_df.sort_values(by="sim_score", ascending=False).head(top_n)
# 实战:融合多路召回
user_like_cid = item_df["cid"].iloc[0] # 模拟用户偏好类目
user_history_titles = [item_df["title"].iloc[0]] # 模拟用户历史浏览标题
hot_recall_df = hot_recall(item_df)
cate_recall_df = category_recall(item_df, user_like_cid)
sem_recall_df = semantic_recall(item_df, user_history_titles)
# 融合去重,生成最终候选集
recall_candidates = pd.concat([hot_recall_df, cate_recall_df, sem_recall_df]).drop_duplicates("num_iid")
print(f"召回候选集数量:{len(recall_candidates)}")
2.3 召回阶段数据应用要点
- 用 API 的
库存字段做前置过滤,避免召回无货商品; - 用
类目、属性实现精准匹配,解决推荐多样性问题; - 用
销量、评分保证热门商品覆盖,提升基础转化率。
三、特征工程:基于商品详情 API 的特征标准化与增强
特征工程是推荐系统效果的核心瓶颈,优质特征能直接提升排序模型精度。淘宝商品详情 API 的原始数据需要经过清洗、标准化、交叉、编码处理,转化为模型可识别的特征。
3.1 核心特征工程操作
- 缺失值处理:填充价格、评分、销量的缺失值;
- 数值标准化:将价格、销量归一化,消除量纲影响;
- 类别特征编码:类目、店铺类型转换为数值特征;
- 交叉特征构建:价格区间 × 销量等级、评分 × 评价数等高阶特征;
- 文本特征提取:标题关键词、属性标签向量化。
3.2 特征工程实战代码
from sklearn.preprocessing import StandardScaler, LabelEncoder
def feature_engineering(item_df):
"""
基于淘宝商品详情API数据的特征工程全流程
"""
# 复制原数据,避免修改原始数据
feat_df = item_df.copy()
# 1. 缺失值处理
feat_df["price"].fillna(feat_df["price"].median(), inplace=True)
feat_df["score"].fillna(feat_df["score"].mean(), inplace=True)
# 2. 数值特征标准化(价格、销量、评分)
scaler = StandardScaler()
num_cols = ["price", "sales", "score", "comment_num"]
feat_df[num_cols] = scaler.fit_transform(feat_df[num_cols])
# 3. 类别特征编码(类目名称、店铺类型)
le = LabelEncoder()
feat_df["category_code"] = le.fit_transform(feat_df["category_name"])
feat_df["shop_type_code"] = le.fit_transform(feat_df["shop_type"])
# 4. 构建交叉特征(推荐系统高阶有效特征)
# 价格等级:0-低价,1-中价,2-高价
feat_df["price_level"] = pd.cut(feat_df["price"], bins=3, labels=[0,1,2])
# 销量等级:0-低销量,1-中销量,2-高销量
feat_df["sales_level"] = pd.cut(feat_df["sales"], bins=3, labels=[0,1,2])
# 交叉特征:价格×销量等级
feat_df["price_sales_cross"] = feat_df["price_level"].astype(str) + "_" + feat_df["sales_level"].astype(str)
feat_df["price_sales_cross"] = le.fit_transform(feat_df["price_sales_cross"])
# 5. 过滤无用特征,保留模型输入特征
model_features = ["num_iid", "price", "sales", "score", "category_code",
"shop_type_code", "price_sales_cross", "comment_num"]
return feat_df[model_features]
# 执行特征工程
feature_df = feature_engineering(item_df)
print("特征工程后数据:")
print(feature_df.head())
3.3 特征工程关键价值
- 基于 API 的原始属性,可扩展出上百个有效特征;
- 交叉特征能捕捉商品商业属性的组合关系(如高价高销量商品);
- 标准化特征让排序模型训练更稳定,避免梯度爆炸。
四、排序阶段:基于 API 特征的精准打分与推荐排序
排序是推荐系统的第二道关卡:对召回的几百个候选商品,通过模型精准打分,按得分从高到低排序,最终展示给用户。淘宝商品详情 API 生成的标准化特征,是排序模型的核心输入。
4.1 排序模型选型
- 轻量场景:逻辑回归(LR)、梯度提升树(GBDT);
- 精准场景:DeepFM、Wide&Deep(深度学习推荐模型)。
本文以工业界常用的GBDT 排序模型为例,基于 API 特征实现商品打分排序。
4.2 排序实战代码
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score
# 模拟标签:1=用户点击/购买,0=未点击(实际由用户行为数据生成)
feature_df["label"] = np.random.randint(0, 2, size=len(feature_df))
# 构建训练数据
X = feature_df.drop(["num_iid", "label"], axis=1)
y = feature_df["label"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练GBDT排序模型
rank_model = GradientBoostingClassifier(n_estimators=100, random_state=42)
rank_model.fit(X_train, y_train)
# 模型评估
y_pred_proba = rank_model.predict_proba(X_test)[:,1]
auc = roc_auc_score(y_test, y_pred_proba)
print(f"排序模型AUC:{auc:.4f}")
# 对召回候选集进行打分排序
def rank_items(recall_candidates, rank_model, feature_df):
# 匹配特征
rank_features = feature_df[feature_df["num_iid"].isin(recall_candidates["num_iid"])]
# 模型预测得分
X_rank = rank_features.drop(["num_iid", "label"], axis=1)
rank_features["rank_score"] = rank_model.predict_proba(X_rank)[:,1]
# 按得分降序排序
ranked_items = rank_features.sort_values(by="rank_score", ascending=False)
# 关联商品基础信息
ranked_items = ranked_items.merge(item_df[["num_iid", "title", "price"]], on="num_iid")
return ranked_items[["num_iid", "title", "price", "rank_score"]]
# 最终推荐结果
final_recommend = rank_items(recall_candidates, rank_model, feature_df)
print("最终推荐排序结果:")
print(final_recommend.head(10))
4.3 排序阶段数据应用要点
- API 的价格、评分、销量是排序模型的强特特征,权重最高;
- 店铺类型、类目编码能区分商品质量与用户偏好,提升精准度;
- 排序得分直接决定商品展示顺序,得分越高越优先曝光。
五、全流程总结与落地优化
5.1 推荐系统全流程
- 数据层:调用淘宝商品详情 API,获取全维度商品基础数据;
- 召回层:基于类目、销量、文本相似度,生成候选商品集;
- 特征层:清洗、编码、交叉 API 数据,构建高质量特征;
- 排序层:用模型对候选商品打分,输出最终推荐列表。
5.2 落地优化建议
- 数据缓存:API 数据定时缓存,减少重复调用,提升效率;
- 特征实时更新:销量、库存、价格等动态特征实时同步;
- 多路召回融合:结合热门、类目、语义召回,平衡精准与多样性;
- 模型迭代:基于用户反馈,持续优化 API 特征与排序模型。
总结
淘宝商品详情 API 数据是电商推荐系统的核心生产资料,贯穿召回、特征工程、排序全流程。通过 API 获取标准化商品数据,结合召回规则筛选候选集,通过特征工程挖掘数据价值,最终用排序模型实现精准推荐,是电商推荐的标准实战路径。
本文代码可直接落地部署,结合真实淘宝 API 密钥与用户行为数据,即可快速构建一套高可用的商品推荐系统。