データサイエンティストのたまご育成日記 vol.10 -データでターゲットを調べるお話-

みなさん、こんにちは!デジタルテクノロジー統括部に新卒入社した長谷川智彦です。
データサイエンティスト未経験の新卒社員がデジタルテクノロジー統括部でどんなことをやっているのか、どのように成長していくのかの学びの過程を記録していくこの企画。今回はターゲットの分析で学んだことを書こうと思います。


段々と秋になってきましたね。SNSを見ると弊社のインターンの様子が投稿で流れてきて、コロナの中でも就活を頑張る学生さん達を尊敬している今日この頃です。さて、前回はビジネスサイドを担当する先輩社員の協力の元、実際の現場で役に立つような分析を始めだしたことを書きました。あれから2か月が経ち、現在はいろいろと自社のサービスに係るデータ分析を行いながら、新規事業の企画を先輩社員の協力の元で着々と進めているような状態です(デジタルテクノロジー統括部に新卒入社で入ると、この時期はこんなことをやっているのだと参考にしていただけたら幸いです)。


今回の記事はその中でも分析依頼の中にあったターゲットの特徴を分析してほしいという案件で学んだことを書いていきます。


分析手法のメリット、デメリットを知る

ターゲットについて知りたい。おそらくマーケティングの分野だけでなく営業や企画など様々な分野で出てくるニーズだと思います。自分たちのサービスを利用してくれている顧客のことがわかれば、どのように動けばいいかがわかるのでとても大事ですよね。
ターゲットについての分析を行う際にはいろんな分析手法があるのですが、今回は分析作業の中で勉強したクロス集計クラスタリング(k-mean法)決定木による分類についてまとめようと思います。


クロス集計について

まずはクロス集計についてです。アンケートの集計などでよく使われるやり方で、集まったデータを2つのカテゴリーで同時に分類と集計を行うことをクロス集計といいます。人材業界のデータで言えば下の図のようにサービスの利用社数(サービスを利用している/いない)を業種ごとで集計したりします。

個人的に上図のようなクロス集計を行うメリットとしては集計結果を項目ごとで比較しやすいことだと思います(他にもExcelでも簡単に作れるなど様々なメリットがありますが今回は1つに絞ります)。たとえば上の図の例を使うとサービスを「利用する顧客」と「しない顧客」を業界ごとで単純に比較することができます。クロス集計のメリットはこのように(カテゴリー)×(カテゴリー)といった複数の切り口での結果を比較した時に結果を解釈しやすいところにあります(他にも(性別)×(利用の有無)や(業種)×(職種)×(利用の有無)などの様々な切り口で作成することができます)。さらに、この結果をグラフとして可視化すれば視覚的にも違いが確認しやすく、分析結果の報告や資料に載せる際も扱いやすいです。


ただ、デメリットをあげるとすると、いろんなカテゴリーごとでデータを集計する際に何個もクロス集計をする必要があることです。性別ごとで集計してみる。業種ごとで集計してみる。年収帯ごとで集計してみる。などいろんな切り口で集計しようとすると何回も行うこととなり時間と労力がかかってしまいます。また、カテゴリー間の関連性ははっきりとわからないので、あるカテゴリーで集計してあるけれども、そこに他の変数がどう影響しているかは説明できません。


なので、「どの業界の顧客が他よりサービスを利用しているか知りたい。」や「男性と女性のどちらの方がサービスを利用しているか知りたい。」のような何かの比較に対しての情報を知りたい場合はクロス集計でも十分です。しかし、「サービスを利用している顧客にはどのようなグループがあってそれぞれのグループがどのような特徴を持っているか」を相手が情報として欲している場合(おそらくこのケースは多い)はクロス集計では時間と手間がかかってしまうのでオススメできません(コロナの影響でリモートワークになり、機械学習が都合上使えなかった時期にひたすらクロス集計をやりましたが大変なのでもうやりたくはないです。機械学習のすごさを実感するにはいい経験かもしれません)。


クラスタリングを使ってみる

では次に、ターゲットの中にはどのようなグループが存在して、各グループはどのような特徴を持つのかを知りたいときに使える手法の一つとしてクラスタリングを紹介します。クラスタリングとは与えたデータをデータ同士の近さに基づきグループ分けする手法で、外的な判断基準(ラベル)なしに分類する教師なし学習の手法の一つです(過去の記事に書いてきた線形回帰や決定木などによる分類は学習に答えとなるデータを与えるので教師あり学習といいます)。
クラスタリングの中には下の図のように階層型クラスタリングと非階層型クラスタリングがありますが、今回は扱うデータ数が多いことから非階層型クラスタリングを用い、その中でも代表的なk-means法を用いて分析を行いました。

k-means法のアルゴリズムをざっくりと説明すると、
1:作りたいクラスターの数と同じ数の点をランダムに選ぶ。
2:他の点は手順1で選んだ点の中で最も近い点のクラスターに所属させる。
3:各クラスター内で重心を計算する。
4:上記で計算した重心からの距離を計算し、距離が一番近いクラスターに各点を割り当て直す。
5:手順2-4を各点のクラスターへの所属情報が変化しなくなる、または所属情報の変化が一定の割合以下になるまで繰り返す。
といったアルゴリズムを取ります。(下図参照)

少し、長く書きましたが、簡単にまとめると、似たデータごとでグルーピングしてくれる手法です。このクラスタリングの手法を使うとターゲットを複数の変数を考慮してグループに分けることができるので、グループに分けた後に各グループの特徴を調べることでそのグループの特性を知ることができます(どれくらいのグループに分けるべきかやk-means法以外の手法に関しては多くの記事がネットにあるのでそちらを参考にしていただけたら幸いです)。
個人的にはこのk-means法でグループにした後に、気になる変数ごとでヒートマップを作成し、特徴をまとめていきました。イメージを持ってもらいやすいように下にsikit-learnにあるアヤメのデータセットで行ったクラスタリング結果とヒートマップの図を入れました。データを3つのクラスターにグループ化し、グループごとで変数の1つをヒートマップにして可視化しています。ヒートマップでは緑色が濃い方がその値を持つ個体が多いことを示しており、各グループで花弁の長さに違いがあることがわかります。

クラスタリングを使うと、例えばサービスの利用者にどのような人たちがいるのか(どのようなグループがいるのか)を知りたいといった要望を解決することに使えます。
しかし、クラスタリングはグループの作成はできるのですが、サービスを利用する顧客としない顧客においてグループが分かれる基準となる条件は何かを具体的に知りたいといった要望に応えるには少し心もとないところがあります。また、グループが分かれたとしてもそのグループがどうしてサービスを利用してくれているのかの原因追及もあまりできません(これはどの手法をとったとしても難しいお話です)。


決定木を使ってみる
では、原因を特定することは難しいにしても、グループが分かれる際の基準となる値を得ることを考えてみます。
この値が知れると、例えば、Webサイト改善サービスを利用してくれる顧客がサービスを利用することでPVがどれくらい稼げるようになると継続して利用してくれるのかの指標となる値がわかることに加え、指標がわかれば、現時点でその企業がその基準を満たしているのかいないのかがわかるので、その状態によってアプローチをするべきか否かの判断がとりやすくなります。
今回はこのグループを分ける基準となる値を知るために決定木を使いました。
決定木とは複数の説明変数の条件からデータを最もよく分割できる条件を順次見つけ、与えられたデータを類似した特徴を持つグループごとに分けることができる機械学習の手法です(分ける際の評価基準となる不純度や決定木の種類などの話もあるのですが今回は特徴だけを書くので割愛させていただきます)。
イメージとしては下の図のように、与えられたデータの内、初めに年齢40歳という条件で分割し、次に得られたグループを別の条件で分割していくといった流れで分割されていきます。

先ほどクラスタリングと比較してみると、クラスタリングでは具体的にグループを分ける値は得れなかった一方、決定木ではまず初めに変数Aが○○以上と以下で分割され、次に変数Bの値が△△で分割されるといったように、分割を行っていくうえで基準となった値が具体的に示されます。この値を得ることでどの程度効果を得ればいいのかの目標値を設定できたり、現状の数値が決定木によって得られた数値に基づいて設定した基準を満たしているかどうかの判断ができるので意思決定を行いやすくなります。


しかし、もちろん決定木にもデメリットがあります。決定木のデメリットとしてはハイパーパラメータ―をうまく選択しないと過学習を起こしてしまうことと、木を深く作ってしまうと解釈が難しくなっていくことです。過学習とは、機械学習のモデルを学習する際に使うデータに適合しすぎてしまって、他のデータを入れると正答率が落ちてしまう現象をいいます。この過学習が起きてしまうと学習で使ったデータ以外では予測の精度が悪くなってしまうので汎用性がなくなります。
また、木の階層を深く作れば予測の精度を上げやすくなりますが、あまり深く作ってしまうと先ほどのターゲットの特徴をまとめる際に分岐の条件が多くなり、かつ、個々の細かいグループで少しずつ条件が異なってしまうので説明が難しくなってしまいます。

実際に僕ははじめこのことを認識できていなかったので、決定木を作成したはいいものの、木が深く、細分化されてしまい、結局どの条件を相手に伝えればいいのか、どこを読み取ればいいのかわからなくなってしまいました。
今回、この問題を解決するために大きく2つのパラメータ―を調整したので紹介しておきます(決定木のモデルはsikit-learnのDecisionTreeClassifierを使用しています)。

\\ 調整した決定木のパラメーター //
max_depth
min_samples_leaf

まず、max_depthは決定木の構造の深さ(階層)を調整できるパラメーターです。木が深く作られ過学習してしまっているなと感じる時はこのパラメーターを調整することで木が一定値よりも深くなることを制限し、過学習を改善することにつながります。
実際に以前使ったKaggleのタイタニックデータで決定木がmax_depthの設定をいじることでどのように変化するか見てみます。
まず、max_depthを設定しない(デフォルトでは階層の深さの限界は設けられていません)場合だと以下のようになります。

model = DecisionTreeClassifier(criterion = "entropy", random_state = 0)

訓練データでの正答率:0.926
テストデータでの正答率:0.762


細かい説明は覗かせていただきますが、ぱっと見だけでも「うへぇ」ってなるかと思います。かつ、末端のノードをみてもサンプル数が1つだったりと少なく(全体の数は445)、個々のケースにしか当てはまらなくなってしまっています。
では次にmax_depthを設定したものを見てみます。

model = DecisionTreeClassifier(criterion = "entropy", random_state = 0, max_depth=3)

訓練データでの正答率:0.807
テストデータでの正答率:0.796

先ほどと違って決定木が細かくなりすぎず見やすくなっています(訓練データでの正答率とテストデータでの正答率の乖離も小さくなっています)。これはmax_depthを3に設定したことで決定木の階層が3のところで木の作成が止まっているからです。

では次にmin_samples_leafを調整してみます。min_samples_leafでは分岐してできたノード(葉)に含まれる最低限のサンプル数を設定できます。どういうことかというと、例えばこのパラメーターに50と設定すると、葉のサンプル数が50以下になる分岐は生成されなくなります。こうすることで個々のデータにしか当てはまらない細かすぎる条件分岐を抑えることができ、一定数のサンプルに当てはまる条件を探しやすくなります。
では、先ほどと同様にタイタニックデータを使用してmin_samples_leafを設定した決定木を作成すると次のようになります。

model = DecisionTreeClassifier(criterion = "entropy", random_state = 0, min_samples_leaf=50)

訓練データでの正答率:0.798
テストデータでの正答率:0.783

先ほどのmax_depthとは違い、階層に制限はないものの1つの葉に属するサンプル数は50以下になっていないことがわかります。
この決定木でも何もパラメーターを指定しない時より条件が読み取りやすくなっています。


以上のように決定木のハイパーパラメーターを調整することで決定木を解釈しやすくできました。個人的には、これらのハイパーパラメーターを調整して決定木を作成したのち、サンプル数と分類されたサンプルの割合、エントロピーなどの不純度を示す指標を参考に条件を辿ることでグループごとの共通の条件値を得るようにしました(このやり方が正しいかどうかはいろんな方のやり方をこれから知っていって直していこうと思います)。


少し長くなりましたが、デメリットがあるにしろ、うまくパラメーターを調節しながら決定木を利用すると分岐の条件が具体的な数値として得ることができ、この数値を参考に様々な施策の基準値を考えることができるので有用な手法の1つだと言えます。
といっても各分析手法によって、得ることのできる情報は異なってくるので、実際の分析では今回紹介した方法も含め様々な方法を行い、それらの結果をすべて踏まえながら行っていきました。完璧な分析手法はないので、いろいろな分析を組み合わせることが大事だと感じます。


総括

今回行ったターゲットの分析において以下のことを学べました。

・クロス集計、クラスタリング、決定木などの分析法のメリット・デメリットを理解できた。それに合わせて様々な分析を行い、包括的に見ることが大事だと感じた。
・決定木のパラメーターに関して勉強でき、決定木の解釈の仕方などが身についた。
・分析で得た結果をどのように相手に伝えるべきかが大事だと理解した(今後自分がビジネスサイドの人に伝える機会がある場合には意識したいです)。
・記事を書く上で意外と手法に対する知識が曖昧なことに気づけた。
・データを使ってターゲットの分析を行うのは純粋に楽しかった。

長くなりましたが、次回以降は分析手法以外の内容にも少しづつふれていきたいと思います。ここまで読んでいただきありがとうございました。次回のデータサイエンティストのたまご育成日記もお楽しみに!



alt


長谷川 智彦 Tomohiko Hasegawa


デジタルテクノロジー統括部 データ&テクノロジー ソリューション部 アナリティクスグループ

大学時代の専攻は植物学・分子生物学。最近趣味でデザインをかじり出した社会人1年目。植物の実験データを正しく解釈するために統計を勉強し始め、データ分析に興味をもつ。データサイエンスはただいま必死に勉強中。

※2020年10月現在の情報です。