データ屋さん

しがないデータ屋さんがデータ仕事について書き残す

データの中に答えはあるか?

データの中に答えはあるか?

みなさんは、どのようなシーンでデータを見る機会があるでしょうか?

  • どうやったら購入されるか?
  • キャンセルする人は、どんな特徴があるか?
  • 口コミを見たら予約してくれるのか?

サービス内容や商品より多少の差異はあっても、データを分析する場合、実現したい目標(購入、予約、応募)に影響を与える要因を探していると思います。

  • 年代により購入額が異なる
  • 前回予約した人は、1ヶ月以内に予約する可能性が高い

このような分析をして、「こんな施策を打てばいいんだ」という答えを求めていると思います。

私の考えでは、「データに答えはない」と考えてます。

答えがない理由

データから見つけられるものは、傾向であり答えではないと考えてます。

例えば、あなたがAmazonのようなECサイト担当者だとしましょう。売上を増やすために、商品をもっと購入してもらおうと考えます。

その際に、どのようなデータを見るでしょうか?

  • 年代ごとの購入率
  • 時期ごとの購入金額
  • リピート購入者

ごく一部ですが、このような軸で売上データを分析するかもしれません。

さて、これらの軸から何がわかりましたか?

  • 20代女性は、他の年代に比べて購入率が高い
  • 12月はクリスマスシーズンなので、購入単価が高い
  • 一度サイトで購入した人は、徐々に購入単価が上がる

ここから言えることは、「リピーターの20代女性に12月ごろ売れるラインナップを拡充する」でしょうか?

確かに、間違ってはいないと思います。ただ、正解とも言い切れません。

なぜなら、これは傾向であり、その条件に合致するから購入してくれる訳ではありません。

どのように答えを探すか

過去の傾向を見ても、あくまで傾向までしかわかりません。では、どうして要因を探せば良いでしょうか?

私は、ABテストをすることで、やっと答えらしいものに辿り着けると考えてます。

ABテストが何かご存じないかは、Wikipediaなどで一度意味を確かめてみてください。

なぜABテストか?

先ほど、答えらしいものに辿り着くにはABテストとお伝えしました。

なぜABテストかというと「同じ状況で、二つの異なる要素を比較できる」ためです。

同じ商品でも、サイトの構造を

  • A:商品画像をたくさん掲載
  • B:口コミを全面に押し出す

この違いを作り出すことで、カスタマーが何に影響を受けて購入しているか比較可能です。

仮に、Bのパターンを閲覧したカスタマーがAよりも購入しているならば、カスタマーは口コミを重視していると言えるでしょう。

答えに近く、答えではない

先ほどの例で、口コミを閲覧した方が、購入してくれるから、カスタマーは口コミを重視しているとお伝えしました。

では、口コミを中心とした画面作成をすれば間違いないでしょうか?

答えは、Noです。

その理由は、

  1. ABテストは、異なるカスタマーで、同一人物ではないため
  2. 商品画像より口コミが重視されそうだが、他の要素もカスタマーの購買に影響を与える

まず、①について説明していきます。

ABテストは、サイトへ訪問したカスタマーにランダムで各パターンの画面を表示します。ただ、ABどちらのパターンも同一人物は触れません。同じ時期・同じ画面を異なる人たちが見ています。

究極のABテストであれば、あるカスタマーを影分身させて、両方のパターンを見せることで、どちらが影響を与えるか比較します。ただ、そんなことは不可能です。

だからこそ、答えには近いが、必ずしも答えになるとは言い切れません。

②は、商品画像と口コミを比較しました。商品画像と比べるとカスタマーは、口コミを重視していそうですが、他の要因と比べていないため、口コミだけが重要な要素と言い切れません。

口コミ以外にも、価格・配送期間・類似商品の数などが考えられます。

今回は、商品画像と口コミを比較しましたが、他の要素と比較した場合の結果は分かりません。

ABテスト以外、意味はないのか?

これまで、データによる探索は傾向がわかるだけで、結局はABテストが必要と記載してきました。では、ABテスト以外の探索的データ分析は不要でしょうか?

ビジネスの世界では、傾向分析も重要な意味があると考えております。

仮に、ABテストをしたい場合、サイトのデザインや動線、実装など様々な変更が発生します。ABテストするたびに、画面を作り替えていては、いくらリソースがあっても不足します。

そのため、おおよその当たりをつけるために、探索的なデータ分析を必要とします。

ただ、それだけでは十分と言えない場合に、ABテストを実施し、確信を得た状態で、サイトへ反映します。

結局どうすればいいの?

これまでの内容で、「ABテストを実施する必要がある。結局傾向分析も重要」とお伝えしてきました。こう見ると、結局すべてやる必要があり、大変になっただけと思われたでしょう。

ただ、要因に迫るとは、本来そのくらい大変なことだと考えております。

それでもなお、伝えなくてはならいないのは、「データの中に答えを探すのではなく、ヒントを探しに行くこと」です。

様々な会社でデータを分析している人がいて、日々何が要因なのか探して、ずっとデータと睨めっこしています。年代でもない、性別でもないと頭を悩ませていると思います。

データの中に答えを探しに行くと、途端に迷路に入り込み、迷って出れなくなります。そのような迷路から抜け出すためには、答えを探しに行くのではなく、ヒントを探しに行ってください。

仮に、「20代女性が購入率が高い」とデータから示唆が得られたら、「機能よりも商品画像を重視してるかもしれない」とヒントが得られます。

そのヒントをベースにABテストを実施してみることで、ヒントからおおよその答えに辿り着けます。

まとめ

データは、掘れば何かが出てきそうな雰囲気があります。ただ、それは底がない沼でもあり、霧がかかった密林でもあります。

懐中電灯(Tableau)とスコップ(SQL)を持って、意気揚々と宝探しに行っても、お宝を見つけて帰れる可能性は低いでしょう。

だからこそ、探索的データ分析で答えを見つけようとせず、ヒントを見つけて、ABテストをしてしまおうくらいの心意気で取り組んでいただければと思います。

M1の審査員傾向を分析(R言語)

前回に引き続き、今回も2021年M-1グランプリの審査のデータを用いて、傾向分析をしていきましょう。

ちなみに、前回は、審査員がつけた得点のバラつきの傾向を見ました。今回は、各審査員の得点の順位と総合順位に乖離があるのか検証しました。

Rによる箱ひげ図

少し冗長な書き方になっていますが、以下の通りで処理をしました。

library(ggplot2)
library(dplyr)
data <- read.csv('data.csv',header=T)
par(family="HiraKakuProN-W3")
target <- colnames(data)

target <- target[-1]

df <- data[,target]

boxplot(df)

df <- df %>% mutate(total = rowSums(df)) 
df <- df %>% dplyr::mutate(total_rank=min_rank(df$total))

# 審査員の得点をランクに変換し、データフレームに代入
df <- df %>% dplyr::mutate(rank_kyojin=min_rank(df$"オール巨人"))
df <- df %>% dplyr::mutate(rank_tomizawa=min_rank(df$"富澤"))
df <- df %>% dplyr::mutate(rank_hanawa=min_rank(df$"塙"))
df <- df %>% dplyr::mutate(rank_shiraku=min_rank(df$"志らく"))
df <- df %>% dplyr::mutate(rank_reiji=min_rank(df$"礼二"))
df <- df %>% dplyr::mutate(rank_matsumoto=min_rank(df$"松本"))
df <- df %>% dplyr::mutate(rank_kaninuma=min_rank(df$"上沼"))

# 総合順位と審査員の個別順位をデータフレームに代入
df$diff_kyojin <- df$total_rank - df$rank_kyojin
df$diff_tomizawa <- df$total_rank - df$rank_tomizawa
df$diff_hanawa <- df$total_rank - df$rank_hanawa
df$diff_shiraku <- df$total_rank - df$rank_shiraku
df$diff_reiji <- df$total_rank - df$rank_reiji
df$diff_matsumoto <- df$total_rank - df$rank_matsumoto
df$diff_kaminuma <- df$total_rank - df$rank_kaninuma

#差分だけのカラムを抽出
diff_data <- df[,grep("diff_",colnames(df))]
boxplot(diff_data,names=target)

f:id:gotto50105010:20211223174445p:plain
総合審査結果差分

図の見方

今回は、総合順位 - 個人の順位をしております。 そのため、総合で1位の得点で、個人得点の順位で2位をつけている場合は、-1になります。

マイナスになれば、過小評価。プラスになれば過大評価していることになります。

考察

※敬称略

審査員 傾向
オール巨人 多少ずれることはあれど、差が0が多いため、個人の結果と総合審査結果には乖離がなさそうですね。すごい
富澤 一番総合順位と乖離が大きそうですね。
乖離幅は小さいですね
志らく 大きく上振れている箇所が目立ちます。(ランジャタイの得点ですね)
礼二 塙さんと同じく乖離幅は小さいですね。
松本 オール巨人師匠と同じくほぼズレが無いです!
上沼 総合順位に比べて過大評価している傾向がありそうですね

M1 の得点を箱ひげグラフで表現

今回は、2021年M-1グランプリの審査結果を箱ひげグラフで表現してみた。

数値をなんとなく聞いても、高い低いぐらいしか判断できないが、 改めて数値を可視化してみることで、多くのことが見えてくる。

Rによる箱ひげ図

コード

library(ggplot2)
data <- read.csv('data.csv',header=T)
par(family="HiraKakuProN-W3")
target <- colnames(data)

target <- target[-1]
target

view_data <- data[,target]

boxplot(view_data)

f:id:gotto50105010:20211220214132p:plain
M1審査結果

考察

  • 塙さんは、得点にブレがなく、出場者ごとの波がない
  • オール巨人師匠は全体的に得点が低め
  • 志らくさん・上沼さんは、得点にブレが大きく、2名の得点が大きく得られると優勝チャンスが広がりそう
  • 松本さんは、大半が90点台前半であるが、稀に得点が上下する
  • 礼二さんは、全体的に得点は高めにつけられるため、確実に得点は稼ぎたい

考察としては、ざっとこんなものだろうか。

1つ可視化するだけでも、審査員の様々な傾向が見えてくる。