How to Win a Data Science Competition - Week1 - メモ
昨年末くらいから、Courseraの「How to Win a Data Science Competition」をやってます。
Kaggleでどうやって入賞するかがコースの目的ですが、前処理をどうするか、特徴量をどう作るかなど、様々な方法が説明されていて勉強になります。
とはいえ、なかなか難しく、進捗はあまりよくありません。内容が難しいというよりも、ロシアなまりのの英語が最大の障壁になっています。字幕も間違えていることが多く、理解できない部分もちらほらあったりします。(英語力が低いのが問題だとは思いますが。)
とはいえ、非常に実践的で良い内容ですので、是非チャレンジしてみてください。
という訳で、以下に1章をやったときのメモを残しておきます。
目次
- Introduction & Recap
- Feature preprocessing and generation with respect to models
- Feature extraction from text and images
Introduction & Recap
Recap of main ML algorithms
線形モデル
Tree-Based Methods
特徴
- 線形依存があるデータの場合、多くの分割が必要となるため、値を補足することが難しくなる。
代表例
- Decision Trees
- random forest
- Gradient Boosted Decision Trees (XGBoost, LightGBM)
k-NN based Methods
k-NN: k-Nearest Neighbors
- 参考リンク
Neural Network
特徴
- 解釈が困難だが、滑らかな非線形決定境界を生成する。
参考リンク
No Free Lunch Theorem.
全ての問題に対して高性能な汎用アルゴリズムは存在しない。
アルゴリズムは、特定の前提条件(データの事前分布など)に依存しているため
- 参考リンク
Feature preprocessing and generation with respect to models
Numeric features
特徴量のスケールに依存するモデル/しないモデル
スケールに依存 | モデル |
---|---|
しない | ・ツリー系 |
する | ・再近傍法 ・線形モデル ・ニューラルネットワーク系 |
大きい値の特徴量が存在する場合、予測値がその特徴量の値に引きずられててしまうことがある。このため特徴量を同じスケールに変換してやる処理が必要。
スケールが予測値に影響する場合、スケーリングを重要なハイパーパラメータとして扱うことができる。
スケール方法
- MinMaxScaler
- StandardScaler
外れ値
以下の手法は、線形モデル、kNN、ニューラルネットワーク系に有用
winsorize
線形モデルの場合、特徴量だけでなく、目的変数に外れ値があった場合も予測値に悪い影響がある。この場合、上限値と下限値でクリッピングをして外れ値を除外する。
財務のデータでこの処理をやることをwinsorizeという
rank
- 数値間が等間隔になるように並べる。外れ値がある場合、外れ値が他の値に近づくためMinMaxScalerより優れたオプションとなる。
rank([-100, 0-, 1e5]) == [0, 1, 2]
- ソートした配列のインデックス値を使用する。
rank([1000,1,10]) = [2,0,1]
log/sqrt
ログ変換、平方根、いずれも大きすぎる特徴量の値を平均に近づけることができる。
特徴量生成
- 事前知識とEDAが重要
- 加算、乗算、除算、その他の特徴量の相互作用は線形モデルだけでなく役立つ
(例) - 商品価格の小数点以下を新しい特徴量として追加(人の価格に対する認識の違いを表現できる)
Categorical and ordinal features
Label Encoding
- カテゴリ変数を単純に整数に置き換える。
- 決定木ベースのモデルで効果的(*)
決定木以外のモデルの場合は、適さない
(*)カテゴリ変数の特定の水準のみが目的変数に影響がある場合でも、分岐を繰り返すことで遅く値に反映できるため
やりかた
アルファベット順
sklearn.preprocessing.LabelEncoder
ColumnA S C Q ↓
ColumnA 2 1 3 出現順序
Pandas.factorize
ColumnA S C Q ↓
ColumnA 1 2 3
frequency encoding
- 出現頻度or出現回数でカテゴリ変数を変換する
- 値の分布に関する情報が保持されるので、線形モデル、決定木モデルで有用
- 値の頻度が目的変数に相関している場合、有用
- 変数の分割数を減らすのに役立つ
- 同じ頻度で複数の変数があった場合は、区別できないので注意
encoding = titanic.groupby('Embarked').size() encoding = encoding/len(titanic) titanic['enc'] = titanic.Embarked.map(encoding) # 同じ頻度の変数があった場合、以下でランク付けするのも可 from scipy.stats import rankdata
One-hot encoding
- 一意の値ごとに新しい列を作り、1を立てる。それ以外は全て0
- 線形モデル、kNN、ニューラルネットワーク系で機能する
- 0 or 1のため既にスケーリングされている
- 重要な数値特徴量がなく、One-hotで多くの特徴量が出来てしまう場合は、ツリー系のモデルはうまくいかない可能性が高い。
スパース行列
- カテゴリ変数に一意の値が大きい場合にOne-Hotを行うと、数値がほとんど0の列がたくさん生成される。これらの配列を効率的に保存するにはスパース行列を利用する。
- スパース行列を使うことで、メモリを節約することができる。
- カテゴリ変数、テキストデータを処理するのに役立つ。
- XGBoost、LightGBM、sklearnなどは、スパース行列を直接処理できる。
(参考)
Feature interactions
- ターゲットがカテゴリ特徴量Aとカテゴリ特徴量Bの両方に依存している場合、これらの2つの特徴量のあらゆる組み合わせを作成し、One-hot encodingを行う。
- 特徴量間の相互作用を考慮することができるので、非ツリーベースモデルに有用。
Datetime and coordinates
Datetime
- Time moments
- 秒、分、時間、週の日、月、年
- 休日フラグ
- 経過時間
- 特定の日にちからの経過日数
- 特定イベントからの経過日数
- 時間差
- 休日までの日数
- アクション間の日数(顧客購入日~顧客へ電話した日の差など)
Coordinates(座標)
- 重要ポイントまでの距離
- 病院、学校、最寄り店舗までの距離など
- クラスター中心までの距離
- 重要ポイントがない場合は、特定の地点(地価予測の場合は、地価の高い場所)を中心として、その中心までの距離を出す
- 非常に古い建物があるなど、特別な地点を中心として、中心までの距離を出す
- 集計値を計算
- ポイント周辺の平均地価などの統計値を算出する
座標の回転
価格の高い土地と、低い土地を斜めに走る通りで区切られていた場合を考える。
この場合、ツリー系のモデルだと、斜めに切れないため、ジグザグな形で切ることになる。しかし、座標を回転することで、まっすぐな線で切ることが出来るようになる。
Missing Values
- 状況により欠損値を埋める方法を選択する
- 一般的な方法:-999など範囲外の値で穴埋めする
- ツリー系モデル:欠損値を別カテゴリとして扱えるため有益
- 線形モデル、NN:パフォーマンスが下がる可能性がある。
- 一般的な方法:中央値、平均値などで穴埋めする
- 線形モデル、NNに有益
- ツリー系の場合、欠損値と判断することが難しくなる⇒ NULLの場合に、isnull特徴量を追加
- 欠損値の再構築
- 時系列データなどで、欠損値がある場合は、前後のデータから概算した数字を補完する
- 特徴量生成の前に欠損値の穴埋めは避ける
- 例えば-999で穴埋めし、各カテゴリの平均値の特徴量を生成する場合、-999の値に引っ張られてしまう場合がある。
- XGBoostは欠損値を扱える
- 外れ値を欠損値として扱う
- TestデータにありTrainデータには存在しないカテゴリを扱う場合
- Trainデータ、Tesetデータ両方のデータを使用したfrequency encodingを試してみる。
参考Links
- Preprocessing in Sklearn
- Feature Scaling and the effect of standardization for machine learning algorithms
- Discover Feature Engineering, How to Engineer Features and How to Get Good at It
- Discussion of feature engineering on Quora
Feature extraction from text and images
Text
- Bog of words
- Embeddings(~word2vec)
Bag of words
- 各単語の出現回数をカウント
sklearn.feature_extraction.text.CountVectorizer
- TFiDF
- TF: 単語の出現頻度
- iDF: 逆文書頻度. レアな単語の数値を高く
# Term frequency tf = 1 / x.sum(axis=1)[:,None] x = x * tf # Inverse Document frequency idf = np.log(x.shape[0]/(x>0).sum(0)) x = x * idf
sklearnを使用
sklearn.feature_extraction.text.TfidfVectorizer
- N-gram ※参考
Text preprocessing
- Lowercase
- 単語を小文字に揃える。
- Lemmatization
- 見出し語化
- 例)
- was → be
- eating → eat
- had → have
- Stemming
- 語尾変化した語の語幹を揃える。
- 例)
- cats → cat
- trouble → troubl
- troubled → troubl
- Stopwords
- 冠詞や前置詞のように重要な情報を含まない単語を除外
word2vec
- 単語の特徴ベクトル。
- BoWと比べ比較的ベクトルは小さい
- 似た意味の単語は似たベクトルを持つ
- 事前トレーニングモデル
Image
- ネットワークで画像処理をする際、途中のレイヤーから特徴量を抽出できる
- 事前学習済みモデルを使用してもよい
- 事前学習済みモデルにfine-tuningを実施することで精度を高めることができる
- データ拡張(data augmentation)により精度を高めることができる
- グルーピング、回転、ノイズ etc..
Seleniumとpywinautoでファイルの自動アップロード
ファイルアップロード処理の自動化
Webアプリケーションへのファイルのアップロード処理をSeleniumを使って自動化した。
環境 :WIndows10、Python3.7、Chrome
アップロード処理の場合、「ファイル選択ボタンを押す⇒ファイル選択⇒アップロード」の流れになると思うが、Seleniumではここがなかなかの鬼門。
ファイル選択ボタンを押して、ファイル選択ダイアログが出た瞬間、OS側の処理となり、Seleniumでは制御できなくなってしまうためである。
send_keysを使った処理
seleniumによるファイルアップロードで検索するとよく出てくるのが、send_keysを使った処理。
まずはこれを試してみたのだが、適用しようとしていたWebアプリではうまく行かなかった。Webアプリのソースを見ると、Javascriptライブラリからファイルアップロード処理をしていた。この場合、単純にsend_keysを使うとうまく行かないようだ。
pywinautoによるファイルアップロード
send_keysでうまく行かず、なかなか焦っていたところ、以下のページにたどり着いた。pywinautoというライブラリを使用すると、制御できるっぽい。試してみたところ、何とか動作させることができました。
seleniumとpywinautoでChromeのWEBページを印刷する。 - とりあえず日記
pywinauto
Windowsの操作を自動化するためのPythonライブラリで、以下の手順でインストールする。
- pywin32(PythonからWindowsAPIにアクセスするためのPythonエクステンション)を入れる https://github.com/mhammond/pywin32/releases
- ライブラリのインストール
pip install pywinauto pywin32
コード
処理の流れ
- (Selenium) ファイル選択ボタンクリック
- (pywinauto) ファイル選択ダイアログのファイル入力欄にフォーカス
- (pywinauto) アップロードするファイルのフルパスを入力
- (pywinauto) ファイル選択ダイアログの「開く」ボタンをクリック
コード
import pywinauto def upload_file(file_path): # アップロードボタンのエレメントを取得 elements = driver.find_elements_by_class_name("xxxxx") element = elements[0] element.click() # pywinautoによる制御 findWindow = lambda: pywinauto.findwindows.find_windows(title='開く')[0] dialog = pywinauto.timings.wait_until_passes(5, 1, findWindow) pwa_app = pywinauto.Application() pwa_app.connect(handle=dialog) window = pwa_app['開く'] window.wait('ready') #ファイル入力(Alt+N) pywinauto.keyboard.send_keys("%N") edit = window.Edit4 edit.set_focus() edit.set_text(file_path) # ダイアログの「開く」ボタンをクリック button = window['開く(&O):'] button.click()
※今回使用したWebアプリはファイルを選択した瞬間、アップロード処理が走ったのでここまでの処理です。通常は、ダイアログが終了し、ファイルアップロードボタンをクリックする流れになると思いますので、その場合は、引き続きSeleniumでボタンクリックする流れになると思います。
※参考
日付範囲で持っているデータに対して日付ごとに値を集計する
やりたいこと
以下のサンプルデータのように、1行に数字データと適用範囲(開始日/終了日)があるデータに対し、日付ごとに集計をかけたい。
sampleデータ
id | start_date | end_date | count |
---|---|---|---|
1 | 2020-01-01 | 2020-01-15 | 20 |
2 | 2020-01-01' | 2020-01-15 | 2 |
3 | 2020-01-05' | 2020-01-06 | 5 |
4 | 2020-01-03' | 2020-01-12 | 7 |
5 | 2020-01-10' | 2020-01-14 | 1 |
6 | 2020-01-02' | 2020-01-13 | 4 |
7 | 2020-01-12' | 2020-01-15 | 9 |
8 | 2020-01-08' | 2020-01-10 | 2 |
9 | 2020-01-02' | 2020-01-08 | 4 |
10 | 2020-01-12' | 2020-01-14 | 10 |
期待する結果
以下のように、適用範囲内にある数字をすべてサマリーして日付ごとに結果を出す。
DATE | AMOUNT |
---|---|
2020-01-01 | 22 |
2020-01-02 | 30 |
2020-01-03 | 37 |
2020-01-04 | 37 |
2020-01-05 | 42 |
2020-01-06 | 42 |
2020-01-07 | 37 |
2020-01-08 | 39 |
2020-01-09 | 35 |
2020-01-10 | 36 |
2020-01-11 | 34 |
2020-01-12 | 53 |
2020-01-13 | 46 |
2020-01-14 | 42 |
2020-01-15 | 31 |
SQL作成
日付の表を作成し、ここに集計データを後から横づけする形で作成していく。
日付の表
まず日付の表を作ってみる。
WITH SAMPLE AS ( SELECT 1 AS ID, DATE('2020-01-01') AS START_DATE, DATE('2020-01-15') AS END_DATE, 20 AS COUNT UNION ALL SELECT 2, DATE('2020-01-01'), DATE('2020-01-15'), 2 UNION ALL SELECT 3, DATE('2020-01-05'), DATE('2020-01-06'), 5 UNION ALL SELECT 4, DATE('2020-01-03'), DATE('2020-01-12'), 7 UNION ALL SELECT 5, DATE('2020-01-10'), DATE('2020-01-14'), 1 UNION ALL SELECT 6, DATE('2020-01-02'), DATE('2020-01-13'), 4 UNION ALL SELECT 7, DATE('2020-01-12'), DATE('2020-01-15'), 9 UNION ALL SELECT 8, DATE('2020-01-08'), DATE('2020-01-10'), 2 UNION ALL SELECT 9, DATE('2020-01-02'), DATE('2020-01-08'), 4 UNION ALL SELECT 10, DATE('2020-01-12'), DATE('2020-01-14'), 10 ), CALENDER AS ( SELECT GENERATE_DATE_ARRAY( (SELECT MIN(START_DATE) FROM SAMPLE), (SELECT MAX(END_DATE) FROM SAMPLE) ) AS DT ) SELECT DATE FROM CALENDER, UNNEST(DT) AS DATE
GENERATE_DATE_ARRAY関数は、開始日から終了日までの日付の配列を返してくれる。開始日に、SAMPLE表の最小値、終了日にSAMPLE表の最大値を設定している。
- GENERATE_DATE_ARRAY関数については以下を参照 cloud.google.com
GENERATE_DATE_ARRAY関数を使って作成される配列をUNNEST関数を使って行に変換している。
UNNEST関数については以下を参照
出力
開始日から終了日まで立てに並んだ表ができた。
DATE |
---|
2020-01-01 |
2020-01-02 |
2020-01-03 |
2020-01-04 |
2020-01-05 |
2020-01-06 |
2020-01-07 |
2020-01-08 |
2020-01-09 |
2020-01-10 |
2020-01-11 |
2020-01-12 |
2020-01-13 |
2020-01-14 |
2020-01-15 |
この表に集計値をくっつけていく。
SQL完成系
WITH SAMPLE AS ( SELECT 1 AS ID, DATE('2020-01-01') AS START_DATE, DATE('2020-01-15') AS END_DATE, 20 AS COUNT UNION ALL SELECT 2, DATE('2020-01-01'), DATE('2020-01-15'), 2 UNION ALL SELECT 3, DATE('2020-01-05'), DATE('2020-01-06'), 5 UNION ALL SELECT 4, DATE('2020-01-03'), DATE('2020-01-12'), 7 UNION ALL SELECT 5, DATE('2020-01-10'), DATE('2020-01-14'), 1 UNION ALL SELECT 6, DATE('2020-01-02'), DATE('2020-01-13'), 4 UNION ALL SELECT 7, DATE('2020-01-12'), DATE('2020-01-15'), 9 UNION ALL SELECT 8, DATE('2020-01-08'), DATE('2020-01-10'), 2 UNION ALL SELECT 9, DATE('2020-01-02'), DATE('2020-01-08'), 4 UNION ALL SELECT 10, DATE('2020-01-12'), DATE('2020-01-14'), 10 ), CALENDER AS ( SELECT GENERATE_DATE_ARRAY( (SELECT MIN(START_DATE) FROM SAMPLE), (SELECT MAX(END_DATE) FROM SAMPLE) ) AS DT ) SELECT DATE, SUM(COUNT) AMOUNT FROM CALENDER, UNNEST(DT) AS DATE INNER JOIN SAMPLE AS S ON S.START_DATE<= DATE and S.END_DATE >= DATE GROUP BY DATE ORDER BY DATE
出力結果
期待した通りの結果が得られた
DATE | AMOUNT |
---|---|
2020-01-01 | 22 |
2020-01-02 | 30 |
2020-01-03 | 37 |
2020-01-04 | 37 |
2020-01-05 | 42 |
2020-01-06 | 42 |
2020-01-07 | 37 |
2020-01-08 | 39 |
2020-01-09 | 35 |
2020-01-10 | 36 |
2020-01-11 | 34 |
2020-01-12 | 53 |
2020-01-13 | 46 |
2020-01-14 | 42 |
2020-01-15 | 31 |
心理統計まとめ - 7-
前回のつづき
7章 「3つ以上の平均を比べよう(分散分析)」
3つ以上の平均値を比べる
3つ以上のグループの平均値を比べたい時は、分散分析を利用する。
群の平均値の平均値の比較を、全体のばらつき(分散)を2つのばらつき(分散)に分解して分析しようとするのが分散分析。
分散分析の手順(1要因被験者間計画)
- 帰無仮説と対立仮説の設定:
帰無仮説 A,B,C3つの母平均は等しい
対立仮説 - 検定統計量の選択:Fという検定統計量を利用
- 有意水準αの決定
- 検定統計量の実現値を求める:データからFを求めるために分散分析表を作成する
- 帰無仮説の棄却または採択の決定:F分布を用いて検定統計量Fの棄却域を決める
多重比較
分散分析をやっただけでは、具体的にどの群とどの群の間に有意差があるかは分からない。どの条件とどの条件の間に差があるのかを確かめるために行う分析を多重比較という。
主な多重比較の方法
- テューキーの方法
- フィッシャーのLSD法
- ニューマン・クルーズの方法
- ダネットの方法
- シェッフェの方法
- ボンフェローニの方法
実験計画
要因と水準
言葉 | 英語表記 | 意味 |
---|---|---|
要因 | factor | データの値を変化させる要因のこと。ハンバーガーのおいしさの違いについて、その原因として会社を考えるのであれば、要因はハンバーガーの会社であり、要因の数は1(1要因とよぶ) |
水準 | level | 要因を構成する条件のこと。ハンバーガーの会社が3つあれば水準数は3 |
被験者間計画と被験者内計画
言葉 | 英語表記 | 意味 |
---|---|---|
被験者間計画 | between-subjects design | 1人の被験者を1つの条件にのみ割り当てる。 対応のないデータ(独立なデータ)に相当 |
被験者内計画 | within-subject design | 同じ被験者が複数の条件を経験する。 対応のあるデータに相当。 |
主効果と交互作用
言葉 | 英語表記 | 意味 |
---|---|---|
主効果 | main effect | その要因だけによる単独の効果のこと |
交互作用 | interaction | 2要因以上の実験計画において、ある要因が従属変数に及ぼす影響の「大きさ」または「方向」が、他の要因の水準によってことなること |
1要因被験者内計画
被験者間計画と被験者内計画の平方和の違い
- 1要因被験者間計画では、群という要因で説明されるもの以外はすべて誤差とみなしていた。
- これに対し、1要因被験者内計画では、群内平方和をさらに分割する。具体的には、個人差によって説明できる平方和を考えて、群内平方和を個人差による平方和とそれ以外とに分割する。
1要因被験者間計画
全体平方和 = 群間平方和 + 郡内平方和(誤差平方和)
1要因被験者内計画
全体平方和 = 条件平方和 + 個人差による平方和 + 残差平方和
※群間平方和を条件平方和と名前を変更している。
2要因被験者間計画
2要因の分散分析では、要因Aの主効果、要因Bの主効果、交互作用の3つの検定が一度に行われる。
全体平方和 = 要因Aの主効果の平方和 + 要因Bの主効果の平方和 + 交互作用の平方和 + 残差の平方和
2要因被験者内計画
2要因被験者間計画との違いは「誤差の平方和」を4つに分解する点。
全体平方和 = 要因Aの主効果の平方和 + 要因Bの主効果の平方和 + 交互作用の平方和 + (個人差の平方和 + 要因Aに対する残差の平方和 + 要因Bに対する残差の平方和 + 交互作用に対する誤差の平方和)
2要因混合計画
一方の要因は被験者間計画、もう一方は被験者内計画という2つの性質を合わせもつ計画。
全体平方和 = 被験者間の平方和 + 被験者内の平方和 = (要因Aの主効果の平方和 + 被験者間の誤差の平方和 ) + (要因Bの主効果の平方和 + 交互作用の平方和 + 被験者内の誤差の平方和)
心理統計まとめ - 6-
前回のつづき
6章「2つの平均を比べよう(t検定)
t検定による平均値の比較
2つの平均値の比較のためのt検定の例
- 「男女で恋愛感情得点に差があるのか」というリサーチ・クエスチョン
- 「新しい指導方法の効果を確かめるために、実験群には新しい指導方法を行い、統制群には旧来の指導方法を行うという比較実験を行った。このとき2群のテスト得点に差があるか」というリサーチクエスチョン
- 「小学3年生と6年生では、外向性に違いがあるか」というリサーチ・クエスチョン
独立な2群の平均値差に関するt検定
母集団分布の仮定
ある変数Xについて、2つの群(第1群、第2群)のXの標本平均( と)を用いて、母平均との差について推測を行うことを考える。
2群の母集団分布の分散についてはそれらが互いに等しいという仮定をおき、第1群と第2群の母集団分布として、を仮定する。
平均値差の標本分布
ここで2群の平均値差に統計的な優位差があるかを見たい。この場合、標本平均の差についての標本分布を考える。この標本分布もまた正規分布になる。
検定統計量と帰無分布
前述の正規分布を標準化する。標準化を行うことによって、標準正規分布に従うようになる。
ここで、2群の母集団平均が等しいと仮定しているので、 となることから、帰無仮説が正しいときの検定統計量は、以下のようになる。
ただし、未知の値である母標準偏差σは通常知ることは出来ないので、他の値で推定しなければならない。まず2つの群に共通な母分散の推定量として、以下を考える。
- :第1群の不偏分散
- :第1群のサンプルサイズ
- :第2群の不偏分散
- :第2群のサンプルサイズ
- :2群をプールした分散。2群に共通の母分散の不偏推定量になっている。つまりこの推定量の期待値は母数に一致する。
以上から検定統計量の式は以下のようになる。
tは自由度 のt分布に従う。
対応のあるt検定
対応のある・なし | 2群への被験者の割り当て | 2群の間の関係 | データの例 | 用いる検定 |
---|---|---|---|---|
対応なし (独立な2群) |
全くランダムに割り当てる | 無関係 | 学籍番号の奇数・偶数で分ける | 独立な2群のt検定 |
対応あり (対応のある2群) |
・まずペアを作った後、それぞれの群に割り当てる。 ・すべての被験者を両方ともに割り当てる。 |
一般に正の相関がある | ・成績が同程度の被験者をペアにする ・双子 ・同一被験者が複数の条件を経験する |
対応のあるt検定 |
検定統計量
- : 2群のデータの差得点の平均
tは自由度 のt分布に従う。
t検定の前提条件とウェルチの検定
t検定の前提条件
- 標本抽出が無作為に行われていること(無作為抽出)
- 各群の母集団の分布が正規分布に従っていること(正規性)
- 2つの母集団が分散が等質であること(分散の等質性)
分散の等質性の検定
分散の等質性が満たされているかを確認するための検定の例
[参考]
https://personal.hs.hirosaki-u.ac.jp/pteiki/research/stat/anova/homogene.html https://staff.aist.go.jp/t.ihara/levene.html
分散の等質性が満たされないとき
通常のt検定とはウェルチの検定など別の方法で検定を行う必要がある。
[参考]
心理統計 まとめ -5-
前回の続き
5章「統計的仮設検定ってなんだろう」
統計的仮設検定の考え方
ある仮設の成否(正しいか間違っているか)について統計的に検討する方法
実際の手順
- 仮説を設定する
- 統計的仮設検定に用いられる標本統計量を選択する
- 仮説が間違っているか正しいかの判断基準になる確率を設定する
- 実際のデータから標本統計量の実現値を計算する
- 最初に定めた仮説が間違っているか正しいか判断する
帰無仮説と対立仮説
本来主張したいこととは逆の内容である帰無仮説を設定する。そして、本当に主張したい仮説を対立仮説として定める。帰無仮説の基では実際に得られたデータがとても極端な値であり、そのような値は非常にまれな確率でしか生じないという事が確認された場合、こうした実際のデータの様子から、「帰無仮説が正しい」という前提を疑い、帰無仮説を棄却する。
有意水準
帰無仮説を棄却し対立仮説を採択するかどうか決定するときに、どの程度低い確率の結果が示されたら帰無仮説を棄却するかという基準になるのが有意水準
有意水準は、αで表され、5%か1%で設定されることが多い。
検定結果の報告
検定統計量の実現値が | 帰無仮説の採否 | 論文などでの報告の仕方の例 |
---|---|---|
棄却域に入る | 棄却する | ・ 5%水準で有意である ・ p < .05 |
棄却域に入らない | 採択する(棄却しない) | ・ 有意な差は認められなかった ・ n.s. |
p値
有意確率、限界水準と呼ばれることもある。帰無仮説が正しいという条件のもとで、標本から計算した検定統計量の実現値以上の検定統計量が得られる確率のこと
2種類の誤り
決定 | は正しい | は間違い |
---|---|---|
を棄却 | 第1種の誤り 確率はα |
正しい決定 確率は1 - β ←これを検定力という |
を棄却しない | 正しい決定 確率は 1- α |
第2種の誤り 確率はβ |
検定力:間違っている帰無仮説を正しく棄却できる確率のこと
統計的仮設検定の手順
手順 | やること |
---|---|
1 | 帰無仮説と対立仮説(両側or片側検定)を設定する |
2 | 仮説に応じた検定統計量を選択する |
3 | 有意水準αの値を決める |
4 | (データを収集した後、)データから検定統計量の実現値を決める |
5 | 検定統計量の実現値が棄却域に入れば帰無仮説を棄却して、対立仮説を採択する。棄却域に入らなければ、帰無仮説を採択する |
いろいろな検定
一つの平均値の検定(標準正規分布を用いた検定)
- 検定の目的:一つの標本平均を母平均と比較する(母分散が既知)
- 帰無分布として用いる確率分布:標準正規分布
- 検定統計量:
母分散が既知とはどんな場合か?
例1:ある学力テストの得点について数十年の蓄積があり、その平均や分散が経験的に分かっている場合。
例2: 工場である製品を作っていて、その製品の重さが平均いくらか、分散いくらの正規分布になるように機械が調整されている場合。
一つの平均値の検定(t検定)
- 検定の目的:一つの標本平均を母平均と比較する(母分散が未知)
- 帰無分布として用いる確率分布:t分布(自由度=サンプルサイズ-1)
- 検定統計量:
:普遍分散
t分布の自由度
サンプルサイズ-1となる。
自由度が大きくなる(サンプルサイズが大きくなる)とt分布は標準正規分布に使づいていく。自由度=∞の時にt分布=標準正規分布となる。
サンプルサイズnが大きいときは、t分布ではなく標準正規分布を利用しても、かなり近い結果が得られる。
相関係数の検定
- 検定の目的:2つの量的変数の間に統計的に有意な相関があるかを見る
- 帰無分布として用いる確率分布:t分布(自由度=サンプルサイズ-2)
- 検定統計量:
カイ2乗検定
名義尺度データに対する検定。
- 検定統計量:
:観測度数。実際の名義尺度データでカテゴリがkである場合のそれぞれのカテゴリに属する度数のこと。
:期待度数。帰無仮説のもとで計算される度数のこと。総度数(サンプルサイズ)に帰無仮説の基でカテゴリkの比率を書けることで求められる
※実際の観測度数と期待度数がかけ離れているほど、つまり「現実」と「期待」のズレが大きいほど値は大きな値となる。
適合度の検定
- 検定の目的:観測度数と期待度数がどの程度適合しているか、マッチしているか、をみる
- 帰無分布として用いる確率分布:カイ2乗分布(自由度=カテゴリ数-1)
独立性の検定
- 検定の目的:2つの質的変数の間に統計的に有意な連関があるかを見る。
- 帰無分布として用いる確率分布:カイ2乗分布(自由度=(行数-1) × (列数 - 1) )
心理統計 まとめ -4-
前回からの続き
4章「標本から母集団を推測しよう」
母集団と標本
- 推測統計:手元にあるデータ(標本)の背後にあるさらに大きな対象(母集団)について推測することを試みる。
- 母集団:関心のある対象全体
- 標本(サンプル):実際に調査や実験を実施した集団
用語 | 意味 | 例 |
---|---|---|
母数 | 母集団における定数 | 母集団(有権者全体)の内閣支持率など。全数調査しないと実際の値は不明 |
標本統計量 | 標本から計算される値のこと(標本が変われば変動する確率変数)標本平均、標本分散、標本相関係数など | 標本の内閣支持率、標本の平均身長など。 |
標本統計量の実現値 | ある特定の標本から実際に計算して求められた数値のこと | 実際に手元に得られた標本から計算された内閣支持率の具体的な値など。 |
母集団分布を仮定する
標本統計量は標本によって変わる。
標本統計量の変動の程度を知るには
(母集団から標本を何度も取り出し、取り出した標本から標本統計量を計算出来る場合)
⇒k回の標本抽出により得られたk個の標本平均を用いて標準偏差を求め、標本平均の変動を知ることができる。
現実にはできないので、標本統計量の変動の大きさを推定することができるような仕組みが必要。
母集団分布を仮定する
母集団分布を仮定することによって標本統計量の分布がどのような分布になるかを数学的に導くことができる。
標本統計の変動の大きさを推定するプロセス
- 母集団分布に何らかの確率分布を仮定する
- 母集団分布の仮定から標本統計量についての確率分布を導く
- 標本分布がどのような確率でどのような値をとるか分かれば、標本統計量の変動を査定できるようになる。
正規分布とその性質
正規分布
平均、分散として以下で表す。
正規分布は連続の確率分布であるという見方をすれば、以下の形で表現できる。
標準正規分布
正規分布にも標準化し、標準正規分布 に変換することができる。
:確率変数Xは に従うという意味。
標準正規分布の特徴
- 平均、中央値、最頻値がすべて0になる
- Z=0から∞の範囲に全体の50%が入る。同様にZ=-∞から0までの範囲にも全体の50%が入る。
標準正規分布にすることで、標準正規分布表という統一規格を利用することができ、標準正規分布における任意の範囲の全体に対する割合を求めることができる。
標本分布
標本統計量の分布のこと。実際に入手できた標本について作成された度数分布ではないことに注意。
名称 | 意味 | 利用される文脈 |
---|---|---|
母集団分布 | 母集団に属するすべての値の分布。通常母集団のすべての値を知ることは出来ないので、正規分布などの確率分布を仮定する | 推測統計 |
標本分布 | 標本統計量の分布。母集団分布の仮定より、数理的に導かれる確率分布。 | 推測統計 |
度数分布 | 実際に得られたデータについて作成される。データの値と度数を対応させたもの | 記述統計 |
母集団( )を仮定したときの標本平均
標準誤差
標本統計量の分布の標準偏差のこと。SE (Standard error)。
- 母数について推測するときの精度を表す
- 標本の大きさ(n)が大きくなれば標準誤差が小さくなり、推定の精度が良くなる。
- nが大きくなれば、偏った標本が抽出される可能性が低くなる
推定と推定量
母数 | 推定量 | 推定値 |
---|---|---|
母集団平均μ 例)日本の大学生の恋愛感情得点の平均 |
標本平均 例)3人の大学生の恋愛感情得点の平均 |
標本平均の実現値 例)ある具体的な大学生3人の標本から実際に計算された恋愛感情得点の平均 |
母集団比率π 例)全国の有権者集団における内閣支持率 |
標本比率ρ 例)有権者1000人の無作為標本の内閣支持率 |
標本比率ρの実現値 例)ある具体的な有権者1000人の標本から実際に計算された内閣支持率 |
母集団相関係数ρ 例)全国の中学3年生の数学と理科のテスト得点の相関係数 |
標本相関係数r 例)中学3年生1000人の無作為標本の数学と理科のテスト得点の相関係数 |
標本相関係数rの実現値 例)ある具体的な中学3年生1000人の標本から実際に計算された数学と理科のテスト得点の相関係数 |
不偏性
標本平均については、母集団分布が何であっても以下の2つが成り立つ
- 期待値が母平均に一致する(不偏性がある)
- 標準誤差で表される
不偏分散
標本分散は不偏性をもたない。母分散を推定するときに、「偏りがある」ので不偏推定量ではない。
推定量 | 不偏性 | 式 | 用途 |
---|---|---|---|
標本分散 | なし | ※1 | |
不偏分散 | あり | ※2 |
※1: 記述統計の文脈(すべてのデータが手元にあって、その中でデータのばらつきを見たいとき)
例)中学生100人分の小遣いのデータがある。このデータにおける小遣いのばらつきを求めたい。つまり、この100人だけに関心がある場合。
※2: 推測統計の文脈(一部の標本から母集団の分布を推定することが目的となるとき)
例)全国の中学生(母集団)の小遣いの分布を知りたい。無作為抽出により、n=100の標本を得た。この標本から母集団における分散を推定したい