RとPythonで学ぶ[実践的]データサイエンス&機械学習

実践的、実用的な1冊

解説書で多く見受けられる既に完璧な状態でのデータの分析でなく、そもそもデータの加工や見方など、モデリングの意味のために分かりやすく書かれています。RやPythonの入門としても分かりやすく丁寧に解説しており使った方が無い方でもこれらのテーマと一緒に学ぶことができます。

・本書で使用しているサンプルスクリプトおよびサンプルデータ
・Anacondaのインストール
・RとRStudioのインストール
・RStudioの使い方
・Anacondaでのライブラリ追加方法
・JupyterNotebookの使い方

ダウンロードするには、本書サポートページの該当箇所で以下のパスワードを入力してください。RtoPythonDataScience2019【すべて半角】

■ 本書サポートページ
https://gihyo.jp/book/2019/978-4-297-10508-2
本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、運用は、必ずお客様自身の責任と判断によって行ってください。これらの情報による開発、運用の結果について、技術評論社および著者はいかなる責任も負いません。

本書記載の情報は、2019年2月現在のものを掲載していますので、ご利用時には、変更されている場合もあります。また、ソフトウェアに関する記述は、特に断わりのないかぎり、2019年2月時点での最新バージョンをもとにしています。ソフトウェアはバージョンアップされる場合があり、本書での説明とは機能内容などが異なってしまうこともあり得ます。本書ご購入の前に、必ずバージョン番号をご確認ください。

以上の注意事項をご承諾いただいたうえで、本書をご利用願います。これらの注意事項をお読みいただかずに、お問い合わせいただいても、技術評論社および著者は対処しかねます。あらかじめ、ご承知おきください。

本文中に記載されている会社名、製品名などは、各社の登録商標または商標、商品名です。会社名、製品名については、本文中では、TM、C、Rマークなどは表示しておりません。

はじめに

データサイエンスや統計解析、機械学習についての解説、RやPythonを使った実行、実装の方法については、すでに優れた多くの書籍が出版されています。これらの理論や実際の操作を知るだけならば、特に目新しい解説書が必要ということもないでしょう。

ただし、アカデミックな教科書や理論書の多くは、分析のために採取されたデータを扱う前提で書かれています。一方、ビジネスの場面で遭遇するのは、業務を遂行する中で「たまった」データを使いたいという要望です。実務における分析では、統計の理論や実行の方法だけでなく、雑多なデータ項目の中で何を使ってよいのか、何を入れてはいけないのか、そのまま入れてもよいのか、いけないとしたらどうすべきか、といったことを判断できる知識が必要です。

また、機械学習の実践的な方法についても多くの良書が出版されています。ただし、機械学習が重視するのは「予測」であり「機械による判断」です。予測や自動的な判断は、データサイエンスに対して企業が求めるニーズの一部です。分析者は、統計解析と機械学習の違いや、それぞれで何ができるのか、何ができないのかを知っておく必要があります。

現在のところ、これらのポイントをデータサイエンスの初心者や初級者向けに解説した書籍は少ないように思います。そして、これを理解するには、統計モデルそのものの意味やさまざまな制約を知っておく必要があります。

そこで、この本が重視しているのは以下の3点です。
・統計的なモデリングとは何なのかを直感的に理解できるようにする
・モデルに基づく要因の分析と予測の違いを理解できるようにする
・実際にモデルを作ったり、結果を解釈したりする際の落とし穴にはまらないようにする

本書は、株式会社野村総合研究所のシステムコンサルティング事業本部で実施している「アナリティクス研修」の一部を整理し、これに必要な情報を補足しつつ書籍化したものです。

研修を実施する中で実感したのは、技術的に十分な知識を身につけている人でも、現実のデータに直面すると簡単な回帰分析すらできないことがあるという事実です。これはなぜだろうという疑問もまた本書を執筆するひとつのきっかけになりました。

ボリュームや準備時間の関係で、すべての研修メニューを書籍化することは残念ながら断念せざるを得ませんでした。やむなく割愛した中には、表計算ソフトウェアを使った簡単な実習、ビジネス上の課題を想定したディスカッション、協調フィルタリングとアソシエーションルールの解説、時系列分析の解説、数理最適化や強化学習を含む最適化手法の解説、オープンデータを利用した総合演習などが含まれています。

一方、実務で遭遇するデータ品質の問題や加工のポイント、回帰モデル、決定木、クラスタリング、次元削減、いくつかの教師あり学習の手法とディープラーニングまで、主要な内容はほぼ盛り込むことができました。データからモデルを作り、そこからなんらかの結果を得るという基本的な手順を体験する目的であれば、必要最低限の内容を網羅しているはずです。

原稿の執筆にあたっては、研修で説明している内容、特に「枝葉」の部分に相当する(しかし重要な)ポイントをできるだけ取りこぼさないように注意しました。また、研修ではセッションを区切ってパッチワークのように実演や実習を重ねていくことから、一般論から各論へとトップダウンに概念を整理して説明していくという形にはなっていません。その結果、書籍としては記述がやや冗長になったところは否めません。これを補う意味で、本文中にはキーワードによる参照を多く配置し、章の間の行き来が容易にできるようにしています。

データサイエンスの幅広い領域のすべてを本書がカバーすることはできませんが、自身で継続的・発展的な学習を進めていくための素養は、本書を一通り読めば身につけることができるでしょう。本書が、データサイエンスに関心のある多くの方にとって、学習の一助となれば幸いです。

2019年2月吉日
著者一同

有賀 友紀 (著), 大橋 俊介 (著)
出版社: 技術評論社 (2019/3/26)、出典:出版社HP

本書で扱う範囲

本書では、データサイエンスを以下のように捉えています。

1データの中から関連性を抽出し、現象の解明や要因の分析に役立つ知識を得る
2データに潜むなんらかの関連性をもとに予測(カテゴリの判別や数値の推定)を行う

上記の観点をもとに、本書では、基本的な統計解析の手法からディープラーニングまでを扱います。特に、統計的なモデルを作成する意味や、手法ごとの「考え方の違い」については詳細な説明を加えました。

本書で除外した項目もあります。データを蓄積し、必要に応じてさまざまな切り口で可視化するといったビジネスインテリジェンスの領域や、結果を最大化(最小化)する選択肢を知る、選択を自動的に行うといった最適化手法の領域は、本書では対象外としました。データベースの操作や大量のデータを扱う手法、非構造化データの処理といった、いわゆるデータエンジニアリングの領域についても対象外としています。

本書で使っている主なツールはRとPythonです。特に前半はR、後半はPythonの利用を前提としています。これは、両者がデータサイエンスの活用においてスタンダードとなっているツールであること、無償で入手できることが理由です。両者はそれぞれに向き・不向きがあるため、片方に寄せるということはしていません。特に入門編に相当する箇所では、RとPythonの両者をできるだけ比較できるような形でまとめています。

本書の構成

本書の構成は以下のとおりです。
第1章データサイエンス入門
第2章RとPython
第3章データ分析と基本的なモデリング
第4章実践的なモデリング
第5章機械学習とディープラーニング

付録ツールの準備と利用法【本書サポートページよりダウンロード可能】
第1章ではデータサイエンスについて、その概要を俯瞰します。

第2章では、RとPythonという2つのツールについて、その特徴と扱い方を解説します。データサイエンスそのものの内容からは少し離れ、RとPythonの基本的な文法やプログラミングを学習するための入門編とも言える内容となっています。この2つを使ったプログラミングについてすでに知っているという方は飛ばしていただいてもかまいません。

第3章と第4章では主に現象を説明するという観点で、統計的なモデリングの手法を解説します。モデリングを実際に行うためのツールとしてRを使用します。これは、「本書で扱う範囲」で述べた1の領域に対応します。第4章では特に、実務で重要となるデータ加工の考え方についてもページを割いて説明します。第4章の最後では、因果推論に関わる技法について説明を加えています。

第5章では予測を目的とした機械学習の手法を解説します。モデリングを実際に行うためのツールとしては、Pythonを使用します。これは、「本書で扱う範囲」で述べた2の領域に対応します。

RやPythonを実行する環境はさまざまですが、パーソナルコンピュータ上でこれらを扱う場合、RについてはRStudio、PythonについてはAnacondaとJupyterNotebookを使うのが便利でしょう。これらのインストール方法と基本的な使い方についての解説は、付録で記述しています(「本書の付属データのダウンロードについて」に記載している本書サポートページからダウンロードしてください)。第2章以降の学習を進める際に参照してください。

サンプルスクリプトとサンプルデータ
本書で利用するサンプルスクリプトとサンプルデータは、本書サポートページからダウンロードできます。ダウンロード方法については、「本書の付属データのダウンロードについて」を参照してください。本書で利用しているツール類のインストール方法を解説したPDFもダウンロードできます。提供するサンプルデータは、以下のいずれかに該当します。

・架空のデータとしてゼロから作成したもの
・現実のデータの特徴(分布、相関関係など)を参考にしながら、架空のデータとして作成したもの

なお、第3章(3.1.4項)と第4章(4.3.2項)で使用する東京都の自治体の指標については、政府が提供するe-StatのWebサイト(https://www.e-stat.go.jp/)から入手したデータをもとに、指標を加工・再作成したものです。実際のデータとは異なるのでご注意ください。

●本書サンプルの動作環境
本書のサンプルスクリプトは、実行環境としてRStudioおよびJupyterNotebookの利用を前提としています。これらの実行環境は、Windows10/Windows8/Windows7、macOS、Linuxに対応しています。

なお、サンプルスクリプトの最終的な動作確認は以下の環境で行なっています。
第2章~第4章•Windows7(64bit)、R3.5.2、RStudio1.1.463
•Windows7(64bit)、Anaconda3(64bit)、JupyterNotebook5.6.0、Python3.7.0
第5章
•Windows7(64bit)、Anaconda3(64bit)、JupyterNotebook4.2.1,Python3.6.0

謝辞

本書の上梓に尽力くださった野村総合研究所の和田充弘さん、技術評論社の取口敏憲さん、風工舎の川月現大さん、そして本書の査読を快く引き受けて頂いた野村総合研究所の福島健吾さんに御礼を申し上げます。

有賀 友紀 (著), 大橋 俊介 (著)
出版社: 技術評論社 (2019/3/26)、出典:出版社HP

目次

第1章 データサイエンス入門
1.1 データサイエンスの基本
1.1.1 データサイエンスの重要性
1.1.2 データサイエンスの定義とその歴史
(1) データサイエンスの定義
(2) データサイエンスのルーツ
(3) データマイニング、そしてビッグデータ
(4) 機械学習
(5) 統計学からデータサイエンスへ
(6) 検索ワードで見るデータサイエンス
1.1.3 データサイエンスにおけるモデリン
(1) 統計モデル
(2) データサイエンスにおけるモデリング
(3) 統計モデルの活用
1.1.4 データサイエンスとその関連領域
(1) データサイエンスの領域
(2) データサイエンスとAI
(3) データサイエンスとBI
1.2 データサイエンスの実践
1.2.1 データサイエンスのプロセスとタスク
(1) CRISP-DM
(2) 6つのフェーズとその進め方
(3) その他のフレームワーク
1.2.2 データサイエンスの実践に必要なツール
(1) ツールの分類
(2) Excelを使ったデータ分析
(3) 専用の商用パッケージ
(4) R、Pythonなどのプログラミング言語
(5) クラウド型の商用サービス
1.2.3 データサイエンスの実践に必要なスキル
(1) スキルの多様化
(2) ビジネス、データサイエンス、データエンジニアリング
(3) チームワークの重要性
1.2.4 データサイエンスの限界と課題
(1) データサイエンスの限界
(2) データサイエンスと法・倫理 コラム ビジネス活用における留意点

第2章 RとPython
2.1 RとPython
2.1.1 RとPythonの比較
(1) 分野とユーザーの違い
(2) 基本機能とライブラリ
(3) 統計解析での利用
(4) 機械学習での利用
(5) 扱いやすさ
2.2 RAP!
2.2.1 Rの概要
(1) Rの特徴
(2) Rの実行環境
(3) 関数
(4) ベクトル処理
2.2.2 Rの文法
(1) 算術演算とオブジェクトへの格納
(2) ベクトル
(3) 論理演算
(4) 型と構造の確認
(5) ベクトルの内容を取り出す
(6) ベクトルへの要素の追加
(7) 行列(マトリクス)
(8) 関数の作成
2.2.3 データ構造と制御構造
(1) データの構造
(2) オブジェクトの型
(3) 制御構造
2.3 Python入門
2.3.1 Pythonの概要
(1) Pythonの特徴
(2) Pythonの実行環境
(3) オブジェクト指向
(4) 拡張ライブラリ
2.3.2 Pythonの文法
(1) 算術演算とオブジェクトへの格納
(2) print() の使い方
(3) リスト
(4) 論理演算
(5) 型の確認
(6) リストの内容を取り出す
(7) タプル
(8) ディクショナリー
2.3.3 Pythonでのプログラミング
(1) プログラムの記法
(2) 関数の作成
(3) 条件分岐
(4) 繰り返し(ループ) 処理
(5) クラスとメソッド
2.3.4 NumPyとpandas
(1) NumPy
(2) pandas
2.4 RとPythonの実行例の比較
2.4.1 簡単な分析の実行例

第3章 データ分析と基本的なモデリング
3.1 データの特徴を捉える
3.1.1 分布の形を捉える ――ビジュアルで の確認
(1) ヒストグラムと密度プロット
(2) 密度プロットの意味
(3) Rでの実行
(4) グループ間の比較とボックスプロット
3.1.2 要約統計量を算出する —— 代表値と ばらつき
(1) 代表値
(2) ばらつきの指標
(3) 分布の偏り
(4) Rでの要約統計量の算出
3.1.3 関連性を把握する一 相関係数の使い方と意味
(1) 関連性の把握
(2) 相関係数の使い方
(3)相関と因果
(4) 相関係数の数学的な意味
3.1.4 Rを使った相関分析 —— 自治体のデータを使った例
(1) 分析の目的
(2) データの準備と加工
(3) Rでの実行
3.1.5 さまざまな統計分析 ― 理論と実際の考え方
(1) 分布の見た目
(2) さまざまな統計分布
(3) 実際のデータ分析での考え方
3.2 データからモデルを作る
3.2.1 目的変数と説明変数 —— 説明と予測 の「向き」
(1) モデリングにおける変数の扱い
(2) 目的変数
(3) 説明変数
(4)説明・予測の向き
3.2.2 簡単な線形回帰モデル —— Rによる 実行と結果
(1) 勤続年数によって残業時間はどの程度増えるか、減るか
(2) 線形回帰モデル
(3) Rを使った線形回帰モデルの作成
(4) 詳細情報の表示 3.2.3 ダミー変数を使ったモデルグループ間の差異を分析
(1) カテゴリとダミー変数
(2) ダミー変数を使った回帰モデル
(3) ダミー変数を使った回帰モデルの解釈
(4) 平均値の差の検定
3.2.4 複雑な線形回帰モデル ―― 交互作用、モデル間の比較
(1) 複数の要因を考慮する
(2) モデリングにおける想定
(3) 交互作用項を加える
(4) 交互作用の意味
(5) 回帰モデルの比較
(6) モデルの解釈
3.2.5 線形回帰の仕組みと最小二乗法
(1) 回帰モデルと説明・予測の向き
(2) 実測値と残差
(3) 最小二乗法
(4) 線形回帰におけるモデリング
3.3 モデルを評価する
3.3.1 モデルを評価するための観点
3.3.2 この結果は偶然ではないのか? 有意確率と有意差検定
(1) 母集団とサンプリング
(2) 有意確率についての留意点
(3) Rを使った有意差検定
(4) 有意確率と効果量
3.3.3 モデルはデータに当てはまっているか? ―― フィッティングと決定係数
(1) 決定係数
(2) 決定係数の性質
(3) 決定係数と有意確率の関係
(4)尤度に基づく指標
(5) そのほかの考え方
3.3.4 モデルは複雑すぎないか? オーバーフィッティングと予測精度
(1) モデルの複雑さ
(2) オーバーフィッティング
(3) AIC(赤池情報量基準)
(4) 正則化
(5)予測精度
(6) 予測精度の指標
(7) 予測精度を確認する
3.3.5 残差の分布 —— 線形回帰モデルと診 断プロット
(1) 残差の分布
(2)線形回帰の診断プロット
3.3.6 説明変数同士の相関― 多重共線性
(1) 多重共線性
(2) VIFの確認
(3) 多重共線性と交互作用
(4) 交互作用項と中心化
(5) ダミー変数とVIF
3.3.7 標準偏回帰係数
(1) 説明変数の効果をどう測るか
(2)標準化と標準偏回帰係数
(3) Rでの標準偏回帰係数の算出

有賀 友紀 (著), 大橋 俊介 (著)
出版社: 技術評論社 (2019/3/26)、出典:出版社HP

第4章 実践的なモデリング
4.1 モデリングの準備
4.1.1 データの準備と加工
(1) データの準備
(2) データのクレンジングと加工
4.1.2 分析とモデリングの手法
(1) 関連性の分析
(2) グループ化
(3)現象の説明、要因の分析
(4)結果の予測
(5) 次元の削減
4.2 データの加工
4.2.1 データのクレンジング
(1) 数値が文字列として格納されている
(2) 行(レコード)と列(フィールド)がうまく分割されていない
(3) 論理的におかしい数字がある、特定の値が不自 然に多い
(4) 文字列を記録している項目で、表記が一致していない
(5)扱いづらい記述形式
(6) 不要な項目、重複した項目など
(7) 長すぎる名称
(8) 欠損値がある
(9) 外れ値がある
(10) ケースごとに固有のID
4.2.2 カテゴリ変数の加工
(1) カテゴリ変数と水準
(2) 分類の基準を変える
(3) 別の変数への置き換え
(4) ダミー変数に展開する際のベースライン
(5) 複数のカテゴリ変数間で重複する水準の扱い
4.2.3 数値変数の加工とスケーリング
(1) 数値変数の加工と留意点
(2) 単純なスケーリング
(3) スケーリングの手法
4.2.4 分布の形を変える ―― 対数変換とロジット変換
(1) 対数関数による変換
(2) ロジット関数による変換
(3) 対数変換を使った回帰モデル
4.2.5 欠損値の処理
(1) 欠損値の扱い
(2) 欠損値の処理方法(除外)
(3) 欠損値の処理方法(代入)
(4) 欠損値発生のメカニズムと対処方法
4.2.6 外れ値の処理
(1) 外れ値がもたらす問題
(2) 外れ値の定量的な評価
(3) 分布の変換と外れ値
(4) 外れ値の影響を受けにくい分析手法
4.3 モデリングの手法
4.3.1 グループに分ける ― クラスタリング
(1) 「分類する」ということ
(2) クラスタリングの仕組み
(3) クラスタリング時の注意——標準化、変数の集
(4)階層型クラスタリング
(5) 非階層型クラスタリング(k平均法)
(6) 散布図の描画
(7) クラスタリングの利用局面
4.3.2 指標を集約する —— 因子分析と主成分分析
(1) モデルの次元
(2) 因子分析
(3) 主成分分析
(4) 因子分析と主成分分析の使い分け
(5) 次元削減
(6) Rを使った因子分析
(7) 因子分析の結果の解釈
(8) 因子得点に基づくクラスタリング
(9) Rを使った主成分分析
(10) 主成分得点に基づくクラスタリング
(11) 算出された指標値の保存
(12) 回帰分析への応用
(13) 因子分析、主成分分析の利用局面
4.3.3 一般化線形モデル(GLM)とステッ プワイズ法
(1) 線形回帰モデルが適用できない場合
(2) 一般化線形モデル (GLM)
(3) GLMの必要性
(4) ステップワイズ法による変数選択
4.3.4 2値データを目的変数とする分析 – ロジスティック回帰
(1) 0か1かの判別
(2) ロジスティック回帰の仕組み
(3) Rによるロジスティック回帰
(4) 予測値の算出についての注意
(5) ロジスティック回帰の利用局面
4.3.5 セグメントの抽出とその特徴の分析 ―決定木
(1) 数式を使わないモデリング
(2) Rを使った決定木の作成
(3) 決定木による予測値の算出
(4) 決定木の利用局面
4.4 因果推論
4.4.1 データから因果関係を明らかにする統計的因果推論
(1) 統計的因果推論
(2) 実験計画法とランダム化比較試験(RCT)
(3) 回帰不連続デザイン
(4) バックドア基準
(5)傾向スコア
(6) 操作変数
(7) 構造方程式モデリング
(8) LINGAM
4.4.2 因果関係に基づく変数選択
(1) 偏回帰係数は何を示しているのか
(2) 事例:何を説明変数とすべきか
(3) 共通の要因(交絡変数)
(4) 合成された結果(合流点)
(5) 途中に位置する変数(中間変数)
(6) バックドア基準と因果推論

第5章 機械学習とディープラーニング
5.1 機械学習の目的と手順
5.1.1 機械学習の基本
(1) 機械学習とは
(2) 機械学習の目的
(3) 学習とフィッティング
(4) 教師あり学習とそのアルゴリズム
(5) 教師なし学習とそのアルゴリズム
(6) そのほかの機械学習
5.1.2 機械学習の手順
(1) データ分割(split)
(2) 学習(fit)
(3) 予測(predict)
(4) 評価 (validation/test)
(5) チューニング
5.1.3 データの準備に関わる問題
(1) 学習データの問題
(2) 半教師あり学習と能動学習
5.1.4 特徴抽出と特徴ベクトル
(1) 特徴ベクトルの必要性
(2) 特徴ベクトルの作り方
コラム 機械学習と強化学習
5.2 機械学習の実行
5.2.1 機械学習ライブラリの活用――scikit-learn
5.2.2 機械学習アルゴリズムの例 ―― ランダムフォレスト
(1) ランダムフォレストの仕組み
(2) ランダムフォレストの主要なハイパーパラメータ
(3) 説明変数の重要度の算出
5.2.3 機械学習アルゴリズムの例 ―― サポートベクターマシン(SVM)
(1) SVMの仕組み
(2) ハイパーパラメータなどの設定
5.2.4 機械学習の実行例
(1) 初期処理(ライブラリ読み込みなど)
(2) データの取り込み、データ分割
(3) 教師ラベルの加工
(4) カテゴリ変数のダミー変数化
(5) 標準化
(6) チューニングと検証データを用いた評価
(7) モデルの選択
(8) テストデータを用いた評価
(9) ドメイン知識の活用
(10) まとめ
5.3 ディープラーニング
5.3.1 ニューラルネットワーク
(1) 基本原理
(2) 普遍性定理
5.3.2 ディープラーニングを支える技術
(1) ディープなネットワーク構造の実現
(2) 大規模データへの対応・高速演算の実現
(3) 特徴量抽出機能の実現
5.3.3 ディープラーニング・フレームワー
(1) TensorFlow
(2) Keras
(3) PyTorch、Chainer
(4) MXNet、Microsoft Cognitive Toolkit
5.3.4 ディープラーニングの実行
(1) 初期処理(ライブラリ読み込みなど)
(2) ネットワーク構造の定義
(3) モデルのコンパイル
(4) 学習の設定と実行
(5) ネットワーク構造のチューニング
(6) 結果の評価と考察
5.3.5 生成モデル
(1) 生成モデルとは
(2) 生成モデルの抱える課題
(3) 生成モデルの主な用途
参考文献
索引

有賀 友紀 (著), 大橋 俊介 (著)
出版社: 技術評論社 (2019/3/26)、出典:出版社HP