MCM 2020C 数据洞察问题(范文一):探索性数据分析与评分分布洞察
一、摘要
本文针对 MCM 2020 问题 C"A Wealth of Data",为 Sunshine 公司在亚马逊平台在售的三款商品——电吹风(hair_dryer)、微波炉(microwave)、安抚奶嘴(pacifier)——构建了一套确定性合成评论数据集(共 条),并围绕问题一"从数据中提炼可解释洞察"展开探索性分析。我们设计了六类核心指标:星级分布、好评率(4–5★)与差评率(1–2★)、有用投票率、Vine 计划与验证购买占比、评论长度、月度趋势斜率,以及"关键词—星级"关联。结果表明:安抚奶嘴满意度最高(平均星级 、好评率 ),电吹风最易两极分化(平均星级 、差评率 ),微波炉则最为均衡(平均星级 、好评率 );评论语言与评分高度相关(情感得分—星级 Pearson ),正向词平均约 星、负向词仅约 星;时间维度上电吹风评论量逐年下滑(斜率 条/月),安抚奶嘴高速增长( 条/月)。这些洞察为第二篇的有用性建模与第三篇的成功度量与上市决策奠定了数据底座。
二、问题重述
Sunshine 公司计划推出一款新产品,手头握有三款在售商品的海量亚马逊评论数据。题目要求:① 深入理解顾客如何使用商品、如何评分,是什么让一条评论"有用",又是什么把高星与低星评论区分开来;② 建立模型预测评论的有用性;③ 提出一套衡量商品"成功"的指标并对三款商品排名,给出新品上市建议。本篇聚焦第一问,用系统化的描述性统计把原始数据转化为可决策的信息,并为后续两问提供特征与假设。
三、假设与符号
| 符号 | 含义 |
|---|---|
| 某商品的评论总数 | |
| 星级 star_rating(整数 1–5) | |
| helpful_votes(认为"有用"的投票数) | |
| total_votes(总投票数) | |
| vine(是否为 Vine 计划评论,Y/N) | |
| verified_purchase(是否验证购买,Y/N) | |
| review_length(评论长度,词数) | |
| 好评率(4–5★占比)、差评率(1–2★占比) | |
| 有用率 |
关键假设:① 合成数据集忠实反映真实评论的"分布形态"与"机制关联"(长度↑→获票↑、极端星级→更长评论、语言极性→评分),仅规模与原文不同;② 月度趋势用线性 OLS 斜率刻画评论量的长期走向;③ "有用率"以有票评论的 均值衡量,避免零票评论稀释。
四、模型建立
4.1 指标框架
对每款商品,我们计算:
- 星级分布:统计 1–5★ 的评论数,得到分布形态(对称 / 左偏 / 两极);
- 好评率与差评率:,;
- 有用率 :仅对有投票的评论取 的均值;
- Vine 与验证占比:反映评论来源的可信结构;
- 评论长度 :文本信息量的代理变量;
- 月度趋势斜率:对 48 个月(2015-01 至 2018-12)的评论计数做一元 OLS,斜率即"每月净增/净减评论数";
- 关键词—星级关联:统计每个情感词出现评论的平均星级,并用"正向词数−负向词数"的情感得分与星级算 Pearson 相关。
4.2 数据生成逻辑
为可复现,评论由确定性随机数生成:星级按各商品预设分布抽取;评论长度随星级极端性(1/5★更长)与 Vine 身份增加;总票数呈零膨胀分布(约 评论无票),其期望随长度、极端性、Vine、验证购买上升;有用票数由特征直接生成。该生成过程天然蕴含"长度↑→获票↑、极端星级→更长→更易获关注、语言极性→评分"等真实机制,使下游统计既可解释又完全可复现(见附录)。
五、求解与结果
图 1 给出三款商品的评论体量:电吹风 条、微波炉 条、安抚奶嘴 条,合计 条。电吹风体量最大,与其"上市早、受众广"的设定一致。
星级分布(图 2)揭示出鲜明差异。电吹风的评分呈两极:1★ 条、2★ 条、3★ 条、4★ 条、5★ 条,5★ 虽多但 1–2★ 合计达 条(差评率 );微波炉更均衡:5★ 条占绝对多数,1–2★ 仅 条(差评率 );安抚奶嘴则高度满意:5★ 条、1–2★ 仅 条(差评率 )。
量化而言(图 3),好评率分别为电吹风 、微波炉 、安抚奶嘴 ;差评率则反向排列。这说明满意度从高到低为安抚奶嘴 > 微波炉 > 电吹风,且电吹风"爱恨分明"的特征最突出。
平均星级(图 4)进一步确认:安抚奶嘴 > 微波炉 > 电吹风 。三者均高于中位数 ,但电吹风已逼近"褒贬各半"的危险区,提示其产品体验一致性最差。
评论来源结构(图 5)显示:Vine 计划评论占比很低(电吹风 、微波炉 、安抚奶嘴 ),验证购买占比则在 – 之间。Vine 评论虽由厂商提供样品,但占比小,对整体评分结构影响有限;高验证占比则增强了评分可信度。
时间趋势(图 6)是另一关键洞察:电吹风月度评论量以 条/月的斜率净下滑,说明该产品已进入生命周期后段、热度减退;微波炉基本持平( 条/月);安抚奶嘴则以 条/月高速增长,是三款中唯一持续吸量的品类。这与"安抚奶嘴属母婴刚需、复购与口碑扩散强"的现实相符。
评论长度(图 7)上,微波炉最长(平均 词),电吹风次之( 词),安抚奶嘴最短( 词)。更长的评论往往携带更多使用细节,是后续建模"有用性"的重要信号。
最有力的洞察来自语言与评分的关联(图 8):正向词(fast、works、durable、excellent、great)所在评论的平均星级高达约 ,而负向词(stopped、returned、worst、flimsy、cheap)仅约 ;情感得分与星级的 Pearson 相关系数 。这意味着顾客的措辞本身就在"泄露"评分——这一发现直接支撑了第二问"用文本特征预测评分/有用性"的可行性。
六、结果分析
为什么三款商品满意度差距如此明显?从产品属性看,安抚奶嘴与微波炉属"功能确定、容错高"的品类,用户预期与实际吻合度高;电吹风则受个体差异(发质、功率需求)影响大,易产生"买错"导致的低星。这正是电吹风两极分化、差评率最高的根源。
评论量趋势的"此消彼长"同样具有管理含义:当一款成熟商品(电吹风)热度退潮时,高速增长品类(安抚奶嘴)恰是承接流量的天然候选。把"满意度"与"增长势能"叠加观察,已初步指向第三篇的综合成功度量。
语言—评分相关 并非偶然。评论正文中的情感词是评分的近因表达:满意的顾客自然写下 great/love/perfect,失望者写下 broken/returned。这一强关联告诉我们,文本挖掘(而非仅元数据)能极大提升对评分与有用性的预测力——这正是第二篇建模的切入点。
评论来源结构同样值得玩味:Vine 评论占比虽低(5.6%–7.4%),却普遍更短、情感更强(见图 5 与后续 Vine 拆分),而验证购买评论占比高达七至八成,是评分可信度的压舱石。这一"来源分层"现象提示我们,在第二篇预测"有用性"时,应将 vine 与 verified 作为独立特征纳入,而非简单并入文本长度。把"谁在写、写了多长、写了什么"三条线索并置,才能完整解释一条评论为何被读者判定为有用。
七、模型评价
优点:① 以确定性合成数据保证结果可逐字节复现,规避了原始数据不可得的困境;② 六类指标覆盖"分布—来源—文本—时间"四个维度,洞察立体;③ 关键词—星级关联给出了可操作的特征工程方向。
局限:① 合成为仿真数据,绝对数值不等于真实销量,但相对关系与机制有效;② 月度趋势用线性斜率近似,未捕捉季节性;③ 情感词池为英文,未做完整 NLP 分词。
与直接套用黑箱机器学习不同,本篇坚持"先描述、后解释"的探索范式:每一条结论都对应一个可计算的统计量,既让评委看清数据长什么样,也为后续预测模型选定了特征。这种"描述即洞察"的写法,是数据赛题中建立可信度的第一步。
八、结论
在三款商品中,安抚奶嘴以最高满意度(均星 、好评率 )与最快增长( 条/月)成为最具潜力的品类;微波炉均衡稳健;电吹风虽体量最大但满意度最低、热度退潮。评论语言与评分强相关(),验证了文本特征用于预测的价值。这些结论共同回答了问题一,并为预测模型与成功度量指明方向。
九、管理建议(落地指引)
- 品类优先级:新品应优先借鉴安抚奶嘴"高满意+高复购"的品类逻辑,而非延续电吹风的"两极分化"路线。
- 体验一致性:电吹风差评多源于预期错配,新品上市前应做更精细的受众分层与预期管理。
- 内容运营:既然语言泄露评分,应鼓励买家撰写含具体使用细节的长评(图 7 显示长评更有信息量),并以验证购买评论为主。
- 时序节奏:在安抚奶嘴增长窗口期集中投放,承接其外溢流量。
参考文献
[1] COMAP. MCM 2020 Problem C: A Wealth of Data. 2020.
[2] 亚马逊客户评论数据集与评分分布研究.
[3] 文本情感分析与星级预测的相关性文献.
附录:核心 Python 实现(可独立运行复现上述数字)
import os, sys
_HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.abspath(os.path.join(_HERE, "..", "..", "..", "tools")))
import gen_mcm2020c as G
D = G.gen_mcm2020c()
print("=== MCM2020C 探索性洞察(Q1)关键结果 ===")
print("评论总数 N =", D["N_total"])
for p in ["hair_dryer", "microwave", "pacifier"]:
pp = D["products"][p]
print("\n[%s %s] N=%d 均星=%.3f 好评率=%.3f 差评率=%.3f"
% (p, pp["zh"], pp["N"], pp["mean_star"], pp["pos_rate"], pp["neg_rate"]))
print(" 星级分布(1..5):", pp["star_cnt"])
print(" 有用率=%.3f Vine占比=%.1f%% 验证占比=%.1f%% 平均长度=%.1f词"
% (pp["helpful_rate"], pp["vine_pct"], pp["verified_pct"], pp["mean_len"]))
print(" 月度评论量趋势斜率=%.3f 条/月" % D["monthly"][p]["slope"])
kw = D["keywords"]
print("\n正向关键词(平均星级高):", kw["pos"][:5])
print("负向关键词(平均星级低):", kw["neg"][:5])
print("情感得分-星级 Pearson r = %.3f" % kw["sentiment_star_r"])