[社内統計学勉強会]Python初学者とANOVA

GMOアドマーケティング SSP開発チームのKA.Mです。普段はSSPに関わる問い合わせ対応、配信、バックエンド、バッチとSSPに関わるシステム開発をしています。
本日は日頃エンジニアチーム内で行っている社内勉強会の1つである機械学習勉強会のエントリーとなります。私は大学時代に統計の基礎は学びましたがそこから10年という年月が経ち知識も風化しつつあり、この機会を利用して改めて知識を整理し業務に役立てようと勉強会に参加しています。

今回のテーマは分散分析(英:analysis of variance、略称:ANOVA)の一元配置法について学びましたので、ざっくりではありますが概要を説明したいと思います。

まず、分散分析とはどのようなものなのか。Wikipediaには以下のようにあります。

観測データにおける変動を誤差変動と各要因およびそれらの交互作用による変動に分解することによって、要因および交互作用の効果を判定する、統計的仮説検定の一手法

引用元 | 分散分析、2017年1月24日、ウィキペディア日本語版、https://ja.wikipedia.org/wiki/分散分析

なるほど、難しいですね。
そこで、Python初学者である筆者がPythonの環境を構築しながら実際に分散分析の一元配置法を解きたいと思います。

環境

今回はjupyterで下記ライブラリを利用して実現します。
Python3はhomebrewからインストールしています。

ソフトウェア バージョン 説明
Python 3.7.0 プログラミング言語
pip 18.1 Pythonのパッケージ監理ツール
jupyter 1.0.0 Pythonの実行完了
pandas 0.23.4 Pythonのデータ解析ライブラリ
matplotlib 3.0.0 Pythonのグラフ描画用ライブラリ
seaborn 0.9.0 Pythonのグラフ美化ライブラリ

ライブラリインストール

pipでJupyter, Pandas, Matplotlib, Seabornをインストールします。

Jupyterの起動

Jupyterはターミナルから簡単に起動できます。

New > Python3 を選択する事でPython3環境となります。
私はPython初学者だったため、xxxx.pyというファイルを開き、試行錯誤していましたので、
最初の躓きポイントだと思います。

対象データ

テストデータを取り込みます。
今回、pandasはDataFrameでのみ利用する形となります。pandasにはその他にも多くの機能があるため、今後Pythonにより多く触れ紹介できる機会を作れたらと考えています。

df.head()

続いて、箱プロットで対象をグラフィカルに表示します。
Seabornを使う事で味気ない箱プロットがグラフィカルに変わります。

sns.boxplot

分散分析表

分散分析表を作成するにはstatsmodelsを利用します。

anova

また、今回利用はしていませんがstatsmodelsで他にも多くの分析が行われています。

推定

はじめに最適水準を確認します。

mean

Cが良さそうです。

では点推定を行います。

scipy.mean

続いて、区間推定を行います。

最後に予測区間を求めます。

まとめ

Python初学者という事もあり、ライブラリの利用方法や効率の良い求め方など不明な点が多々あり、手探りで予測区間まで求めましたが、もっとより良い方法があるのではないかと思っています。
GMOアドマーケティングは今後もユーザの動向を分析し、ユーザにあった広告を表示する事でユーザ体験向上に取り組んでまいります。

リクルーティング

GMOアドマーケティングではユーザの動向を分析し、ユーザ・ファーストな広告表示をするため、機械学習に力を入れています。
もし、興味がございましたら、下記ページからお問い合わせ下さい。