import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as st
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
dat = np.zeros([20, 5])
# 販売数
dat[:, 0] = [10, 20, 30, 40, 50,
60, 70, 80, 90, 100,
110, 120, 130, 140, 150,
160, 170, 180, 190, 200]
# 値段
dat[:, 1] = [5810, 2280, 4820, 1780, 4200,
6890, 3510, 5720, 3290, 3100,
2970, 1680, 3550, 2510, 3220,
1900, 1850, 5300, 2450, 1000]
# 広告費
dat[:, 2] = [650, 200, 490, 130, 520,
140, 390, 290, 590, 90,
520, 210, 650, 80, 430,
140, 550, 200, 450, 100]
# ネガティブな口コミ数
dat[:, 3] = [24, 31, 19, 22, 33,
17, 21, 16, 19, 18,
11, 13, 32, 14, 12,
9, 8, 14, 3, 1]
# ポジティブな口コミ数
dat[:, 4] = [3, 4, 8, 5, 2,
12, 15, 17, 14, 9,
19, 18, 14, 17, 20,
22, 19, 18, 8, 23]
Aさんは、卒業研究のため、商品のオンライン販売に興味を持ち、Webページ上で売れる商品にはどのような特徴があるのか調べようとしました。このため、まず、商品が売れる、売れないには、
この4つが影響を持つと考えました。このため、2020年に発売されたイヤホンを20製品調べ、その販売数とともに、前述した4つのデータ(値段、広告費...)を集めました。これを、numpy配列に格納しています。データは以下のように格納されています。
Aさんは、まず、値段、広告費、ネガティブな口コミ数、ポジティブな口コミ数、どの影響が強そうなのか、視覚的に確認してみることにしました。このため、
の散布図を4つ描くことにしました。
→ これを実施し、どの要因が一番重要そうか、考察してください。なお、散布図を書く際は、横軸と縦軸のラベル名を(hanbai suu)、(nedan)のように、きちんとつけるようにしましょう。
散布図を書くことで、視覚的にどの影響が強そうか、なんとなく確認することができました。これをより統計的に把握するため、以下の組み合わせ、
で、相関係数とそのp値を求めることにしました。
→ 相関係数とp値を求めてください。また、「相関係数がいくつで、p値がいくつだから、これとあれにはこのような関係がある」という形式で考察を行ってください。
ヒント: 相関係数のp値とは、「求めた相関係数が0である確率」です。したがって、「p値が高い → 相関係数が0である確率が高い → 相関関係なし」、「p値が低い → 相関係数が0である確率が低い → 相関関係あり」と解釈します。一般に、「p値が1, 5, 10%未満ならば、1, 5, 10%水準で有意な相関が認められた」などと記載します。p値が10%以上の場合、例えば15%や20%などの場合は、p値が高いと解釈するため、相関なしと考えます。なお、後述するt検定などのp値とはまったく別ものですから、注意してください。
相関係数を求めることで、販売数に関係のある要因と、関係のない要因を切り分けることができました。ここでAさんは、販売数を予測する式があれば、マーケティングに活かせるかもしれないと考えました。ここで、重回帰分析を使用することにしました。
シンプルな予測式を得るために、重回帰分析を行う際、販売数と有意な相関関係のなかった要因は除去して分析することにしました。
→
ヒント: 回帰分析を実施するには、入力変数Xと出力変数Yがそれぞれ必要です(fit関数に対する引数)。出力変数Yである「販売数」は「dat[:, 0]」で一気にアクセスできますが、有意な相関関係のない要因を除外した入力変数Xは、一気に表現できません。そのため、Xを自分で作ることが必要です。仮に、dat[:, 3]が販売数と相関がなかったのならば、dat[:, 1], dat[:, 2], dat[:, 4]を横につなげた新たな配列をXにするなどの処理が必要です。あるいは、Xを零行列として一度定義し、dat[:, 1], dat[:, 2], dat[:, 4]の各要素をfor文で順番に代入していく、といった処理でも良いでしょう。
販売数を予測する回帰式を作った後は、実際に予測してみることも必要です。このためAさんは、2つ構築した回帰式のうち、優れている方を用いて、実際に予測を行うことにしました。まずは確認のため、あらかじめ集め、販売数がすでにわかっている20製品の予測を行うことにしました。その後、20製品以外の、新しい予測を行うことにしました。
→
相関分析、重回帰分析を終え、販売数を予測できるようになりました。これでも十分ではありますが、Aさんはさらに分析をしたいと考え「ネガティブな口コミが多い製品は、少ない製品よりも、販売数が少ない」という仮説を立て、これを検証しようと思いました。どうすればいいか先生に相談したところ、
というアドバイスをもらい、この通りに分析を実施することにしました。
→
ヒント: t検定におけるp値とは「2群の平均値同士の差が0である確率」です。したがって、「t検定のp値が高い → 差が0である確率が高い → 差がない」、「t検定のp値が低い → 差が0である確率が低い → 差がないとは言えない → 差がある」と解釈します。でも、これは正確な説明ではありません。もうちょっと詳しくなりたい人は、t検定の理論を自分で勉強しましょう。
これら一連の分析を得て、イヤホンの販売数と、値段、広告費、口コミの関係が詳細にわかりました。Aさんはこれを卒業論文にまとめようとしたところ、先生に、「販売数、値段、広告費、口コミの平均値と標準偏差を載せると、読者がどんなデータを使ったのかわかりやすいよ」と言われました。このため、以下を求めることにしました。
→
備考: 正確には、70%ではなく68.27%、95%ではなく95.45%です。
今回は、相関係数、重回帰分析、t検定、平均・標準偏差などの使い方と考察方法について問題を出しました。これらを十分に使いこなせれば、いわゆる大卒としては十分な水準です。
とはいえ、人工知能やデータサイエンスを生業に企業では常識レベルの話なので、そういった仕事をしたい方は、自分の肌になじむまで、データ集め・プログラミング・分析と考察を繰り返しましょう。