PyLearn ST Ex 02

下記の知識を確認します。

  • if文、for文、リストがわかる。
  • numpy配列がわかる。
  • 配列における「行」と「列」を混同していない。
  • 散布図をかける。
  • 相関係数とそのp値の意味がわかり、また、プログラムで導出できる。
  • t検定のp値の意味がわかり、また、プログラムで導出できる。
  • 重回帰分析により、予測式を立てられる。

準備

まずは、以下のコードをコピペしてください。

In [1]:
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配列に格納しています。データは以下のように格納されています。

  • dat[i, 0] -> 製品iの販売数
  • dat[i, 1] -> 製品iの値段
  • dat[i, 2] -> 製品iの広告費
  • dat[i, 3] -> 製品iのネガティブな口コミ数
  • dat[i, 4] -> 製品iのポジティブな口コミ数

問題1.

Aさんは、まず、値段、広告費、ネガティブな口コミ数、ポジティブな口コミ数、どの影響が強そうなのか、視覚的に確認してみることにしました。このため、

  • 縦軸: 販売数、横軸: 値段
  • 縦軸: 販売数、横軸: 広告費
  • 縦軸: 販売数、横軸: ネガティブな口コミ数
  • 縦軸: 販売数、横軸: ポジティブな口コミ数

の散布図を4つ描くことにしました。

→ これを実施し、どの要因が一番重要そうか、考察してください。なお、散布図を書く際は、横軸と縦軸のラベル名を(hanbai suu)、(nedan)のように、きちんとつけるようにしましょう。

問題2.

散布図を書くことで、視覚的にどの影響が強そうか、なんとなく確認することができました。これをより統計的に把握するため、以下の組み合わせ、

  • 「販売数」と「値段」の相関係数
  • 「販売数」と「広告費」の相関係数
  • 「販売数」と「ネガティブな口コミ数」の相関係数
  • 「販売数」と「ポジティブな口コミ数」の相関係数

で、相関係数とそのp値を求めることにしました。

→ 相関係数とp値を求めてください。また、「相関係数がいくつで、p値がいくつだから、これとあれにはこのような関係がある」という形式で考察を行ってください。

ヒント: 相関係数のp値とは、「求めた相関係数が0である確率」です。したがって、「p値が高い → 相関係数が0である確率が高い → 相関関係なし」、「p値が低い → 相関係数が0である確率が低い → 相関関係あり」と解釈します。一般に、「p値が1, 5, 10%未満ならば、1, 5, 10%水準で有意な相関が認められた」などと記載します。p値が10%以上の場合、例えば15%や20%などの場合は、p値が高いと解釈するため、相関なしと考えます。なお、後述するt検定などのp値とはまったく別ものですから、注意してください。

問題3.

相関係数を求めることで、販売数に関係のある要因と、関係のない要因を切り分けることができました。ここでAさんは、販売数を予測する式があれば、マーケティングに活かせるかもしれないと考えました。ここで、重回帰分析を使用することにしました。

シンプルな予測式を得るために、重回帰分析を行う際、販売数と有意な相関関係のなかった要因は除去して分析することにしました。

  • 問題2で、有意な相関関係のなかった要因を除外し、販売数を予測する式を、重回帰分析により実施してください。
  • 「切片付きの回帰式A」を立ててください。また、完成した式を述べてください。
  • 「切片なしの回帰式B」を立ててください。また、完成した式を述べてください。
  • 回帰式Aと回帰式Bについて、RMSEによる誤差を求めてください。また、どちらの回帰式が優れているか、述べてください。

ヒント: 回帰分析を実施するには、入力変数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文で順番に代入していく、といった処理でも良いでしょう。

問題4.

販売数を予測する回帰式を作った後は、実際に予測してみることも必要です。このためAさんは、2つ構築した回帰式のうち、優れている方を用いて、実際に予測を行うことにしました。まずは確認のため、あらかじめ集め、販売数がすでにわかっている20製品の予測を行うことにしました。その後、20製品以外の、新しい予測を行うことにしました。

  • 製品5の予測結果を求めてください。また、実測値と比較し、どの程度ずれているか述べてください。
  • 自分で好きな入力を採用し、その状況での予測結果を得てください。

問題5.

相関分析、重回帰分析を終え、販売数を予測できるようになりました。これでも十分ではありますが、Aさんはさらに分析をしたいと考え「ネガティブな口コミが多い製品は、少ない製品よりも、販売数が少ない」という仮説を立て、これを検証しようと思いました。どうすればいいか先生に相談したところ、

  • まずは、20製品の「ネガティブな口コミ数」の平均値Mを求める。
  • 20製品のうち、M以上の製品を「高批判製品群」、M未満の製品を「低批判製品群」と名付ける。
  • 「高批判製品群の販売数の平均値H」と「低批判製品群の販売数の平均値L」を求める。
  • HとLの差が、Aさんが調べたいことの答えとなる。
  • ただし、有意な差が生じているのかわからないので、「高批判製品群の販売数」と「低批判製品群の販売数」で、t検定(較したい2群の分散が等しくないときのt検定)を実施する。
  • ただし今回は、「差があること」を調べたいのではなく、「高批判製品群の方が、低批判製品群よりも、販売数が少ない」という「方向を持つ差」を調べたいので、片側検定か、両側検定か、よく考えることが必要である。

というアドバイスをもらい、この通りに分析を実施することにしました。

  • ネガティブな口コミが多い製品と、少ない製品には、販売数に、どの程度の差がありますか?
  • その差には、有意差がありますか?あるならば、10%水準有意?5%?1%?どれですか?
  • 片側、両側、どちらを考えるべきかは、よく注意してください。

ヒント: t検定におけるp値とは「2群の平均値同士の差が0である確率」です。したがって、「t検定のp値が高い → 差が0である確率が高い → 差がない」、「t検定のp値が低い → 差が0である確率が低い → 差がないとは言えない → 差がある」と解釈します。でも、これは正確な説明ではありません。もうちょっと詳しくなりたい人は、t検定の理論を自分で勉強しましょう。

問題6.

これら一連の分析を得て、イヤホンの販売数と、値段、広告費、口コミの関係が詳細にわかりました。Aさんはこれを卒業論文にまとめようとしたところ、先生に、「販売数、値段、広告費、口コミの平均値と標準偏差を載せると、読者がどんなデータを使ったのかわかりやすいよ」と言われました。このため、以下を求めることにしました。

  • 販売数の平均値と標準偏差
  • 値段の平均値と標準偏差
  • 広告費の平均値と標準偏差
  • ネガティブな口コミ数の平均値と標準偏差
  • ポジティブな口コミ数の平均値と標準偏差

  • これらを求めてください。
  • 今回集めた製品の値段は、いくらからいくらの範囲に、約70%のデータが集中していると考えられるか、述べてください。
  • 今回集めた製品の値段は、いくらからいくらの範囲に、約95%のデータが集中していると考えられるか、述べてください。

備考: 正確には、70%ではなく68.27%、95%ではなく95.45%です。

捕捉

今回は、相関係数、重回帰分析、t検定、平均・標準偏差などの使い方と考察方法について問題を出しました。これらを十分に使いこなせれば、いわゆる大卒としては十分な水準です。

とはいえ、人工知能やデータサイエンスを生業に企業では常識レベルの話なので、そういった仕事をしたい方は、自分の肌になじむまで、データ集め・プログラミング・分析と考察を繰り返しましょう。