製品企画担当者は、レビュー掲示板やコミュニティに溜まる顧客の投稿を毎日読んでいます。投稿が数万件になれば、「どの機能がよく言及されるか」は集計できます。しかし、「よく言及され、しかも不満も大きい機能は何か」を一つの数値で取り出すのは難しいことです。言及量の順位と平均感情スコアを別々に見ても、どの機能から直すべきかは決めにくいのです。
ソーシャルメディアの投稿から、顧客が重要と考えているのに満足していない製品機能を、一つのスコアで選び出せるでしょうか。
この問いに答えた論文を一編読んでみます。
- タイトル: 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年のAmazon Echo発売後、市場が急速に拡大しました。論文は、米国のユーザー数と機器台数が大きいとする二つの報告書の推定を根拠に挙げています。
- スマートフォン、タブレット、音楽ストリーミング、スマートホームとつながる、技術集約型の製品です。
- 技術が成熟した製品なので、顧客側から出発する市場牽引(market pull)の視点からの分析が必要です。
データはレディット(Reddit)から集めました。レディットはブランドや製品名ごとの掲示板(サブレディット)で整理されており、投稿がツイッターやインスタグラムより長いという特徴があります。分析期間は2018年4月1日から5月31日までの2か月です。収集した投稿は全部で27,013件です。Google Homeの掲示板から9,437件、Amazon Echoの掲示板から17,576件を集めました。コメントと投稿は同じ水準の文書として扱いました。
第1段階: 収集と前処理
- 入力: ソーシャルメディアの投稿と投稿時刻
- 処理: 長さとキーワードで文書をふるい分け、単語の集まりに変換する
- 出力: 投稿時刻順に並べた単語の集まり(bag-of-words)
- 200字未満の短い投稿を除きます。「[deleted]」「Wow」「Yup」のような投稿からは、解釈できるイベントが作れません。
- Amazon、iTunes、YouTubeなど、他のウェブアドレスへのリンクをすべて削除します。
- RAKE(Rapid Automatic Keyword Extraction)アルゴリズムで、文書ごとにキーワードを抽出します。
- NLTKのストップワードリストで、意味のないキーワードを除きます。ただし、「don」「no」「not」「nor」は残します。論文は、この四つのトークンを残した理由を明らかにしていません。
- 有効なキーワードが4個未満の文書を除きます。
- 残った文書を、キーワードと重みの組で表します。
論文は、携帯電話の音声コマンドが不便だったという短い不満の投稿が、各キーワードに重み1.0を持つ組に変換される例を挙げています。この前処理は、新しい投稿が入るたびにリアルタイムで行われます。
第2段階: イベントの検出と追跡
- 入力: 時系列順に入ってくる単語の集まり
- 処理: 三つのポリシー(エネルギーの減衰、イベントの生成と支持の配分、イベントの更新)を適用する
- 出力: 生きているイベントの一覧と、時点別のエネルギー、キーワード
- 新しい文書と、生きているすべてのイベントとの類似度を求めます。
- 最も高い類似度が閾値より低ければ、新しい文書が新しいイベントになります(「誕生」)。
- 閾値以上であれば、最も似ているイベント一つに入り、そのイベントに支持を与えます(「成長」)。支持の大きさは類似度の値です。
- すべてのイベントのエネルギーは、時間単位ごとに減ります(「衰退」)。エネルギーが閾値を下回ったイベントは消えます(「消滅」)。
新しい文書を最も似たイベント一つにだけ入れるのは、イベントの内容を明確に保つためです。
エネルギーは、直前の時点のエネルギーにエイジング係数α(0から1の間)を掛け、その時点で受けた支持を足して求めます。本来のエイジング理論は、累積支持をシグモイド関数で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アシスタント(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で、小数第3位でわずかに異なります。
同じ式を逆向きに使えば、論文に重要度・満足度・機会スコアがすべて載っているイベントで、計算を確認できます。「リマインダー」は重要度が1.998、機会スコアが3.859です。式から満足度を逆算すると、2×1.998−3.859=0.137となり、論文の0.136とほぼ一致します。二つのイベント(「故障」「リマインダー」)で、表に記された重要度の値と式から、論文の機会スコアが再現されます。この重要度が正規化前の値か後の値かは論文が明らかにしておらず、この計算だけでは確認できません。
論文は、改善機会を競争市場で顧客を引きつける重要な機能とみなし、優先的に取り組む対象とします。ただし、後述の結果で見るようにスコアの順位とマップの領域が異なることがあるため、両方を確認したうえで優先順位を決めるほうが安全です。論文は、安定化機会を、少ない投資で満足度とロイヤルティの高い顧客を守るために使えるとしています。安定化機会が破壊的イノベーションの領域を指す可能性もあると見ています。
設定によって変わるもの
結果は、分析者が決めるいくつかの値によって変わります。
- エイジング係数α: 値を下げるとイベントが早く消えます。論文は、入力データの発生頻度と分析目的に合わせて決めるよう述べています。
- 類似度の閾値: 新しいイベントを作るか、既存のイベントに入れるかを決めます。データの内容の特性に合わせて決めます。
- 時間単位: エネルギーが減る単位です。イベントのライフステージを観察するには、適切な単位を決める必要があります。
- 正規化: マップ上の位置は、時点ごとの正規化の結果によって決まります。
結果: 5月31日時点で「故障」イベントが機会スコア4.491で最優先の修正対象だった
イベント検出の結果: 5,327件のうち、1日を超えて存続したのは355件だけ
分析期間全体で、5,327件のイベントが検出されました。このうち93.3%は1日以内に消えました。似た文書が後に続かなかった結果であり、小さな課題や不人気な意見と解釈しました。たとえば、4月25日に2件の文書から生じたYouTubeメディアアクセスのイベントは、翌日に消えました。
論文は、1日を超えて存続した355件のイベントを分析しました。これらのイベントは1日平均で約7.11回発生し、平均寿命は5.42日でした。分析期間の60日間を通して生き続けたイベントには、「Bluetooth接続」(イベント4)や「音楽再生」(イベント9)などがあります。「Spotify」(イベント931)は50日間存続しました。イベント名は、主要キーワードと代表的な文書を見て人が決めます。研究チームは、データ分析の専門家9名(教授3名、大学院生6名)とともに、この解釈の過程を進めました。
時点別の重要度上位イベント
4月1日には62件のイベントが生まれ、そのうち6件が1日を超えて存続しました。重要度1位は「Bluetooth接続」(1.594)、2位は「音楽再生」(1.211)でした。5月1日までに、1日を超えて存続したイベントが186件生まれ、そのうち151件が消えました。この日の1位は「音楽再生」(2.517)、2位は「Spotify」(2.244)、3位は「Bluetooth接続」(2.228)でした。
5月31日の上位イベントは次のとおりです。
- 「故障」: 2.321
- 「Bluetooth接続」: 2.090
- 「リマインダー」: 1.998
- 「Spotify」: 1.899
論文は、5月1日に「Spotify」「寝室の照明」「スマートプラグ」が上位に上がったことを、利用範囲が音楽ストリーミングと照明制御に広がったサインと読み取りました。
5月31日の機会ランドスケープマップ
過少充足領域には、機会スコアの高いイベントが6件ありました。
- 故障
- Bluetooth接続
- リマインダー
- フィードバック送信
- 音楽再生
- ルーティン
「故障」は重要度が最も高いのに、満足度が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)、「ハーモニー」(2.702)がありました。
機会スコアの順位とマップの領域は、必ずしも一致しません。適正充足領域の「Spotify」(3.299)は、過少充足領域の「ルーティン」(3.020)よりスコアが高くなっています。論文は、このように食い違う理由を説明していません。筆者は、マップを正規化した重要度で描くためではないかと推測していますが、根拠として確認した内容ではありません。順位と領域が異なることがあるため、実務では両方を確認します。
一つのイベントの機会スコアの変化
論文は、「音楽再生」(イベント9)と「オーディオ機器接続」イベントのスコアと位置の変化を追跡しました。
「音楽再生」は、4月1日の誕生時点で過剰充足領域にあり、機会スコア1.600はそのときのイベント平均1.191より高い値でした。その後、関心は高まり、満足度は下がりました。5月1日にはスコアが4.447まで上がり、過少充足領域に移りました。5月31日には、満足度が上がって重要度が少し下がり、スコアは3.305に下がりました。
「オーディオ機器接続」は、サウンドバー、Bluetoothスピーカー、テレビにスマートスピーカーを接続するイベントです。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)に変わりました。
実務者にとっての価値
過少充足領域のイベントは、満足できない機能や設計など、直すべき点を直接指し示します。過剰充足領域のイベントは、少ない投資でロイヤルティの高い顧客を守れる機能を教えてくれます。導き出される機会には、自社製品だけでなく、競合製品、関連サービス、ソフトウェア、購買体験まで含まれます。論文は、この方法をリアルタイムの顧客モニタリングソフトウェアに発展させられると見ています。
研究者にとっての価値
この方法は特定の分野に縛られず、再現できます。ニュースなど別のテーマのテキストにも適用できます。単語ベクトル、感情分析ツール、正規化の方式を、それぞれ差し替えられます。そのため、どの要素がスコアをどれだけ変えるかを比べる後続研究が可能です。
論文が示す限界
論文は、主な限界として次を挙げています。
- 文書類似度の計算を改善できます。fastTextの代わりに、BERTやELMoなどの最新モデルを使えます。
- 先に消えたイベントと似たイベントが後で再び現れる現象を扱っていません。新しい文書を最も似たイベント一つにだけ入れる方式も、似たイベントすべてに割り当てる方式に変えられます。
- 機会スコアとマップ上の位置の過去の変化だけを分析しました。今後の位置やスコアは予測できません。
論文は、特許、ニュース、科学論文、企業独自のVOCデータへの適用を今後の課題として挙げています。
筆者が考える適用条件
以下は論文に書かれた内容ではなく、筆者が実務への適用を念頭に付け加える条件です。
- 二つの指標の範囲を確認します。満足度は0から1の間ですが、重要度はエネルギーから求めた対数値であり、表4で最小値が0.693、最大値が2.517です。このまま足し引きすると、機会スコアは重要度の影響をより大きく受けます。
- スコアとマップの領域を併せて見ます。事例で順位と領域が異なるイベントがあり、論文はその理由を説明していません。
- 重要度は言及量です。事例では、Amazon Echo掲示板の投稿(17,576件)がGoogle Home掲示板の投稿(9,437件)より多くありました。コミュニティの規模が異なるデータを混ぜると、大きなコミュニティのイベントが重要と出やすくなります。
- 感情分析ツールは、一度決めたら維持します。ツールが変わると満足度の値が変わり、時点間の比較が崩れます。
- 1日で消えたイベントを捨てる基準は、データの規模に応じて決め直します。事例では、検出されたイベントの93.3%がこの基準で外れました。
すぐに試せること
- 自社製品のコミュニティやレビューの投稿を、投稿時刻とともに集めます。200字未満の投稿と、有効なキーワードが4個未満の投稿を除き、残った投稿をキーワードの集まりに変換します。まず、残る投稿がどれくらいあるかを確認します。
- すでにトピックごとにまとめたデータがあるなら、論文の方法を簡略化した試験用の手順を回してみます。以下の手順は論文の方法そのままではありません。
- エネルギー: まとまりごとに、1日単位の言及数を支持とみなし、直前のエネルギーにαを掛けてから足します。αは、事例の0.9から始めます。論文は、言及数ではなく、文書とイベントの類似度を支持として累積するため、この値は元の方法のエネルギーとは異なります。
- 満足度: まとまりに属する投稿ごとに0から1の間の感情スコアを求め、日付ごとに平均します。古い日付ほど重みを小さくして加重平均します。
- 機会スコア: 「重要度 + max(重要度 − 満足度, 0)」を計算し、上位5件を選びます。重要度をそのまま使った結果と、0〜1に正規化した結果の両方を求め、順位がどれくらい変わるかを比較します。
- 選ばれた上位のまとまりの代表的な投稿を直接読み、名前を付けます。論文でも、イベント名は人がキーワードと代表的な文書を見て決めました。この最初の段階で、スコアの順位と実際の不満の内容が合っているかを確認します。
ビジネスインテリジェンスラボは、顧客データと技術データを併せて分析する方法を、今後も紹介していきます。