产品经理每天都会阅读评论板和社区里积累的客户帖子。帖子达到数万条时,“哪些功能被频繁提及”还可以统计出来。但是,要用一个数字找出”既被频繁提及、不满又大的功能是哪个”,就很困难。如果把提及量排名和平均情感得分分开来看,就很难决定先改进哪个功能。
能否用一个分数,从社交媒体帖子中筛选出客户认为重要但并不满意的产品功能?
下面来读一篇回答这个问题的论文。
- 标题:Identification of time-evolving product opportunities via social media mining
- 期刊:Technological Forecasting and Social Change
- 年份:2020
- DOI:10.1016/j.techfore.2020.120045
论文提出了一种结合两部分的方法。第一部分是基于老化理论(aging theory,认为事件会产生、成长、衰退直至消失的理论)的事件检测与跟踪(Event Detection and Tracking,EDT)算法。第二部分是情感分析与机会算法(opportunity algorithm)。上一篇文章借助这篇论文讨论了机会如何随时间变化。本文集中讨论分数的计算逻辑以及实务中需要注意的地方。
全文使用的术语如下。
- 事件(event):把关键词相似的帖子按时间顺序归并而成的集合。新帖子进入后,事件的关键词和权重会随之改变。
- 能量(energy):事件从相似帖子处获得的支持的累积值。随时间推移而减少。
- 重要度(importance):定义为同一时点的能量值,公式中含有自然对数(ln)。论文原文的公式出现乱码,难以确认其准确形式。
- 满意度(satisfaction):对事件所含帖子的情感得分按时点加权平均所得的值。取值在 0 到 1 之间。
- 机会得分(opportunity score):把重要度和满意度合并成一个数的值。
- 机会全景图(opportunity landscape map):以横轴为重要度、纵轴为满意度,把事件标成点的图。
动机:客户声音很多,却没有用来确定优先级的数字
为什么社交媒体上的客户声音很重要
论文认为社交媒体已成为消费者意见交流的主要渠道,并给出了以下依据。
- 有报告称,86% 的美国成年人和 79% 的欧洲成年人使用社交媒体服务。
- 77% 的客户在购买前会在社交媒体上阅读他人的产品评论。
- 75% 的客户对评论的信任高于个人的直接推荐。
- 企业开设”My Starbucks Idea”、“Samsung Global”等社交渠道,倾听不经审查的客户声音(Voice of Customer,VOC)。
- 比竞争对手更早掌握客户需求的企业,能建立竞争对手难以轻易模仿的客户关系。
既有研究没有涉及的部分
既有的产品规划研究会大量收集商业评论、微博客和在线讨论帖。研究者对这些数据应用主题分析和情感分析。也有研究把它们与机会发现(chance discovery)、网络分析、形态分析、卡诺模型等理论模型相结合。通过这些方式,研究识别了产品功能和问题,找出了有影响力的用户,评估了功能满意度,并形成了新产品概念。
论文指出了三个空白。
- 缺少生命周期视角。社交媒体上的客户声音是实时产生并变化的,因此需要跟踪其产生、成长和消亡。
- 没有分析单个客户声音的机会水平。多数研究只是用各主题的文档数或平均情感得分,分别表示重要度和满意度。
- 没有给出可用于产品规划的具体方向。虽然对满意度做了量化,但结果并未转化为产品开发和改进的方向。
论文还指出,既有研究停留在静态视角。想要发现新的机会,每次都得重新做主题建模之类的复杂实验。
方法:把相似帖子归并为事件,并按时点为每个事件计算重要度、满意度和机会得分
论文把方法分为收集与预处理,以及两个阶段来说明。这两个阶段是:1)检测并跟踪客户所说事件的阶段;2)识别并评估产品机会的阶段。本文把收集与预处理单独列为第 1 步。论文的第二阶段被拆成两部分,满意度与重要度的计算为第 3 步,机会得分与全景图为第 4 步。因此,本文的第 2 步对应论文的第一阶段(第 3.1 节),本文的第 3、4 步对应论文的第二阶段(第 3.2.1 节和第 3.2.2 节)。
案例与数据
论文选择智能音箱作为案例,理由有三。
- 2014 年亚马逊 Echo 发布后,市场迅速增长。论文依据的是两份报告对美国用户数和设备数规模很大的估计。
- 它是与智能手机、平板电脑、音乐流媒体和智能家居相连的技术密集型产品。
- 这是技术已经成熟的产品,因此需要从客户端出发的市场拉动(market pull)视角进行分析。
数据取自 Reddit。Reddit 按品牌和产品名称划分为各个板块(subreddit),帖子也比 Twitter 或 Instagram 的更长。分析期间为 2018 年 4 月 1 日至 5 月 31 日,共两个月。收集的帖子共 27,013 条,其中 Google Home 板块 9,437 条,Amazon Echo 板块 17,576 条。评论和主帖按同一层级的文档处理。
第 1 步:收集与预处理
- 输入:社交媒体帖子及其发布时间
- 处理:按长度和关键词筛选文档,并转换为词袋
- 输出:按发布时间排序的词袋(bag-of-words)
- 剔除不足 200 字的短帖。“[deleted]”、“Wow”、“Yup”之类的帖子无法形成可解释的事件。
- 删除所有指向亚马逊、iTunes、YouTube 等其他网址的链接。
- 用 RAKE(Rapid Automatic Keyword Extraction)算法为每篇文档提取关键词。
- 用 NLTK 停用词表去掉无意义的关键词。但保留”don”、“no”、“not”、“nor”。论文没有说明保留这四个词元的原因。
- 剔除有效关键词少于 4 个的文档。
- 把剩余文档表示为关键词与权重的组合。
论文举了一个例子:一条抱怨手机语音指令不方便的短帖,被转换成每个关键词权重均为 1.0 的词袋。这一预处理在每条新帖子进入时实时进行。
第 2 步:事件检测与跟踪
- 输入:按时间顺序到来的词袋
- 处理:应用三项策略(能量衰减、事件生成与支持分配、事件更新)
- 输出:存活事件列表,以及各时点的能量和关键词
- 计算新文档与所有存活事件的相似度。
- 若最高相似度低于阈值,新文档成为新事件(“诞生”)。
- 若达到或超过阈值,则并入最相似的一个事件,并给该事件提供支持(“成长”)。支持的大小就是相似度值。
- 所有事件的能量每过一个时间单位就会减少(“衰退”)。能量降到阈值以下的事件会消失(“消亡”)。
新文档只放入最相似的一个事件,是为了让事件的内容保持清晰。
能量的计算方法是:用上一时点的能量乘以老化系数 α(0 到 1 之间),再加上该时点获得的支持。原本的老化理论会用 sigmoid 函数把累积支持转换为 0 到 1 之间的值,但论文没有使用这个函数,而是直接把累积支持当作能量。α 越小,能量减少得越快,事件消失得越频繁。
文档相似度借助预训练词向量计算。案例中使用的是 fastText。计算顺序如下。
- 单词 w 与文档 D 的相似度,是 w 与 D 中所有关键词相似度的最大值。
- 在文档 D1 的关键词中,只把与 D2 的相似度超过阈值的关键词放入相关词集(Relevant Word Set,RWS)。
- 对 RWS 中关键词的相似度按词频加权平均,得到”从 D1 看 D2 的相似度”。
- 同样求出反方向的值,再对两个值取平均。
新文档并入事件后,事件的关键词权重按以下规则变化。以下说明参考论文图 2 的例子,只整理其规则。
- 新文档的关键词中,与事件的相似度未达到 RWS 阈值的,不予采纳。
- 与新文档相似的既有关键词,获得奖励,权重乘以 1.2。
- 与新文档相距较远的既有关键词,受到惩罚,权重乘以 0.8。
- 两边都有的关键词,先乘以 1.2,再加上其在新文档中的词频。
- 事件中原先没有的新关键词,以其在新文档中的词频作为权重加入。
- 经过这样的更新,权重变低的关键词会从事件的关键词集合中移除。
案例中,α 设为 0.9,文档相似度阈值设为 0.7。
第 3 步:满意度与重要度的计算
- 输入:各事件在各时点的能量,以及事件所含文档
- 处理:为每篇文档计算情感得分并加权平均,再用能量求重要度
- 输出:各事件在各时点的满意度和重要度
- 当新文档并入事件或成为新事件时,测量该文档的情感极性。
- 在每个时点,计算进入该事件的文档的平均情感得分。
- 对各时点的平均情感做加权平均,得到满意度。时点越早,权重越小。
- 基于同一时点的能量值,用含自然对数(ln)的公式求重要度。
论文写道,情感分析工具可以使用 NLTK、TextBlob、gensim、VADER 等 Python 库。
满意度权重随时点递减,是为了更重视最近的客户反应。权重用 0 到 1 之间的实数 α 来设定。论文只描述了权重随时间递减,并没有说明这个 α 是否与能量计算中的 α 是同一个值。满意度接近 1,表示客户对该事件的反应是正面的;接近 0,则表示是负面的。
被许多客户频繁提及的事件,重要度更大。这是因为相似文档大量进入的事件能量较高。案例中 4 月 1 日的重要度列表里,最低的两个事件”功能比较(Feature comparison)“和”Google Assistant”均为 0.693。论文原文的重要度公式出现乱码,因此无法由此值准确倒推出能量。
案例中 5 月 31 日的满意度为:“故障(Malfunction)” 0.152、“提醒(Reminder)” 0.136、“例程(Routines)” 0.129。
第 4 步:机会得分与机会全景图
- 输入:各事件在各时点的重要度和满意度
- 处理:用机会算法计算得分,并把事件分配到图中的三个区域
- 输出:各时点的机会得分排名,以及改进机会和稳定化机会列表
- 机会得分按”重要度 + max(重要度 − 满意度, 0)“计算。
- 绘制全景图时,每个时点都要对重要度做最小-最大归一化(min-max normalization,把最小值变换为 0、最大值变换为 1 的变换)。这是因为随着时间推移,重要度的最大值会变大。
- 把全景图分成三个区域:适度满足(appropriately served)、过度满足(over-served)和未充分满足(under-served)。
- 重要度高而满意度低的事件,视为”改进机会(Improvement opportunities)“。重要度低而满意度高的事件,视为”稳定化机会(Stabilization opportunities)”。
这一公式是把 Ulwick(2009)在结果驱动创新理论中提出的机会算法移植到事件上。公式的含义很简单:重要度大于满意度时,按差值额外加分;满意度大于重要度时,第二项为 0,得分等于重要度。
以 5 月 31 日的”故障”事件为例计算。重要度为表 4 中的 2.321,满意度为 0.152。机会得分为 2.321+(2.321−0.152)=2.321+2.169=4.490。论文给出的值是 4.491,在小数点后第三位略有差异。
把同一公式反过来使用,就可以用论文中重要度、满意度、机会得分齐全的事件来验证计算。“提醒”的重要度为 1.998,机会得分为 3.859。由公式反推满意度,2×1.998−3.859=0.137,与论文的 0.136 基本一致。对这两个事件(“故障”、“提醒”),用表中所列的重要度值和公式,都能复现论文的机会得分。这里的重要度是归一化之前还是之后的值,论文没有说明,因此仅凭这一计算无法确认。
论文把改进机会视为在竞争市场中吸引客户的重要功能,并作为优先处理的对象。不过,正如下面的结果所示,得分排名与图中区域可能不一致,因此两者都确认后再确定优先级更为稳妥。论文认为,稳定化机会可以用较少的投入留住满意度和忠诚度高的客户。论文还认为,稳定化机会可能指向颠覆性创新的领域。
随设置而变化的内容
结果会随分析者设定的几个值而变化。
- 老化系数 α:调低后事件消失得更快。论文建议根据输入数据的发生频率和分析目的来设定。
- 相似度阈值:决定是创建新事件还是并入既有事件。根据数据的内容特性来设定。
- 时间单位:能量衰减所依据的单位。要观察事件的生命周期阶段,就必须设定合适的单位。
- 归一化:图中的位置取决于各时点的归一化结果。
结果:以 5 月 31 日为准,“故障”事件的机会得分为 4.491,是最先应当改进的对象
事件检测结果:5,327 个事件中只有 355 个存活超过一天
整个分析期间共检测到 5,327 个事件。其中 93.3% 在一天之内消失。这是因为没有相似文档跟进,被解释为小问题或不受欢迎的意见。例如,4 月 25 日由两条文档形成的 YouTube 媒体访问事件,在第二天就消失了。
论文分析了存活超过一天的 355 个事件。这些事件平均每天发生约 7.11 次,平均寿命为 5.42 天。在 60 天的分析期间内始终存活的事件包括”蓝牙连接”(事件 4)和”音乐播放”(事件 9)等。“Spotify”(事件 931)存活了 50 天。事件名称由人根据主要关键词和代表性文档来确定。研究团队与 9 位数据分析专家(3 位教授、6 位研究生)一起进行了这一解释过程。
各时点重要度靠前的事件
4 月 1 日产生了 62 个事件,其中 6 个存活超过一天。重要度第 1 位是”蓝牙连接”(1.594),第 2 位是”音乐播放”(1.211)。截至 5 月 1 日,共产生了存活超过一天的事件 186 个,其中 151 个已经消失。这一天的第 1 位是”音乐播放”(2.517),第 2 位是”Spotify”(2.244),第 3 位是”蓝牙连接”(2.228)。
5 月 31 日靠前的事件如下。
- “故障”:2.321
- “蓝牙连接”:2.090
- “提醒”:1.998
- “Spotify”:1.899
论文把 5 月 1 日”Spotify”、“卧室灯”、“智能插座”的出现,解读为使用范围扩展到音乐流媒体和灯光控制的信号。
5 月 31 日的机会全景图
未充分满足区域中有 6 个机会得分较高的事件。
- 故障
- 蓝牙连接
- 提醒
- 提交反馈
- 音乐播放
- 例程
“故障”的重要度最高,而满意度仅为 0.152,非常低,因此机会得分为 4.491,是最高的。客户对语音片段的音质、语言支持、消息发送和指令识别留下了不满。“例程”是用一条指令执行多项任务的新功能。该事件的机会得分为 3.020。客户抱着期待去使用,但满意度只有 0.129。有位客户抱怨说,基本例程可以运行,但自定义例程无法运行。
适度满足区域有 27 个事件,过度满足区域有 18 个事件。过度满足区域中有”YouTube Music”(2.533)、“Bart”(1.890)、“Google Play Music”(1.649)。Google Play Music 和 YouTube Music 的用户比 Spotify 用户少,但平均满意度更高。适度满足区域中有”Spotify”(3.299)、“卧室灯 2”(3.200)、“Harmony”(2.702)。
机会得分排名与图中的区域并不一定一致。适度满足区域的”Spotify”(3.299)得分高于未充分满足区域的”例程”(3.020)。论文没有解释出现这种错位的原因。笔者推测,可能是因为绘图时使用了归一化后的重要度,但这并不是经过确认的依据。由于排名与区域可能不同,实务中应当两者都确认。
单个事件的机会得分变化
论文跟踪了”音乐播放”(事件 9)和”音响设备连接”事件的得分与位置变化。
“音乐播放”在 4 月 1 日诞生时处于过度满足区域,其机会得分 1.600 高于当时事件平均值 1.191。此后关注度上升,满意度下降。到 5 月 1 日,得分升至 4.447,转入未充分满足区域。5 月 31 日,满意度上升,重要度略有下降,得分降至 3.305。
“音响设备连接”是把智能音箱连接到条形音箱、蓝牙音箱和电视的事件。5 月 9 日诞生时它处于适度满足区域。此时得分 1.751 低于平均值 1.983。5 月 20 日转入未充分满足区域,得分升至 4.517。此后重要度从 0.994 降至 0.266,满意度从 0.483 升至 0.590,于是移入过度满足区域。
意义与局限
带来了什么变化
- 按生命周期阶段(诞生、成长、衰退、消亡)跟踪客户声音。静态分析看不到的变化由此显现。
- 把每个事件的重要度和满意度合并为一个机会得分,用来确定优先级。
- 用数字表示事件在各时点于图中位置的变化。
- 可以看到事件关键词随时间变化的过程。例如,“音乐播放”的第 1 位关键词,从诞生日的”country music”(11.246)变成了 5 月 31 日的”play music”(1199)。
对从业者的价值
未充分满足区域的事件,直接指出了不令人满意的功能或设计等需要改进之处。过度满足区域的事件,则指明了可以用较少投入留住忠实客户的功能。得出的机会不仅涉及自家产品,还包括竞争产品、相关服务、软件乃至购买体验。论文认为,这一方法可以发展成实时客户监测软件。
对研究者的价值
这一方法不局限于特定领域,可以复现。它也可以应用于新闻等其他主题的文本。词向量、情感分析工具、归一化方式都可以分别替换。因此,可以开展后续研究,比较哪个要素对得分的影响有多大。
论文指出的局限
论文列出的主要局限如下。
- 文档相似度的计算可以改进。可以用 BERT 或 ELMo 等较新的模型代替 fastText。
- 没有处理先前消失的事件,后来又出现相似事件的现象。把新文档只放入最相似的一个事件的做法,也可以改为分配给所有相似事件。
- 只分析了机会得分和图中位置的过去变化,无法预测未来的位置或得分。
论文把应用于专利、新闻、科学论文和企业自有 VOC 数据列为后续课题。
笔者看到的适用条件
以下不是论文中记载的内容,而是笔者着眼于实务应用而补充的条件。
- 确认两个指标的范围。满意度在 0 到 1 之间,而重要度是由能量求得的对数值,表 4 中最小值为 0.693,最大值为 2.517。照此直接相加减,机会得分受重要度的影响会更大。
- 同时查看得分和图中区域。案例中有排名与区域不同的事件,而论文没有解释其原因。
- 重要度就是提及量。案例中 Amazon Echo 板块的帖子(17,576 条)多于 Google Home 板块的帖子(9,437 条)。混合不同规模社区的数据时,大社区的事件容易显得重要。
- 情感分析工具一旦选定就保持不变。工具一换,满意度值就会改变,时点之间的比较就会失效。
- 丢弃一天内消失的事件的标准,应按数据规模重新设定。案例中,检测到的事件有 93.3% 因这一标准而被排除。
马上可以做的事
- 把自家产品的社区或评论帖子连同发布时间一起收集起来。剔除不足 200 字的帖子和有效关键词少于 4 个的帖子,把剩下的帖子转换为关键词组合。先确认还剩下多少帖子。
- 如果已有按主题归类的数据,可以运行一个简化论文方法的试验流程。以下流程并非论文方法的原样。
- 能量:把每个组合每天的提及数视为支持,用上一时点的能量乘以 α 再相加。α 从案例中的 0.9 开始。论文累积的不是提及数,而是文档与事件的相似度,因此这个值与原方法的能量不同。
- 满意度:为组合中的每篇帖子计算 0 到 1 之间的情感得分,并按日期取平均。日期越早,权重越小,再做加权平均。
- 机会得分:计算”重要度 + max(重要度 − 满意度, 0)“,选出前五名。分别求出直接使用重要度的结果和归一化到 0~1 的结果,比较排名有多大变化。
- 亲自阅读选出的靠前组合中的代表性帖子,并为其命名。论文中的事件名称也是由人根据关键词和代表性文档确定的。在这个第一步中,要确认得分排名与实际的不满内容是否吻合。
商业智能实验室(비즈니스인텔리전스랩)将继续介绍把客户数据与技术数据结合起来分析的方法。