どうも、TJです!(自己紹介はこちら)
初心者向けPython入門ということで、今回は「機械学習」について解説したいと思います。
機械学習とは「AIを実現するための手段」
機械学習をひとことで言うと、「コンピュータがデータから学習して、入力xと出力yの関係性を見つけること」です。
例えば、人間が感覚的に分かっているような「気温が上がるとアイスクリームの売り上げが上がる」といった法則を、客観的なデータを基にコンピュータが学習するイメージです。
機械学習を活用して、アイスクリームの売上個数とか来店人数とかを予測することができれば、仕入れの個数や人件費を最適化して利益率を最大化する、ってこともできますよね。
また、最近よく耳にする「人工知能(AI)」や「ディープラーニング」と機械学習はどう違うのでしょうか?
それらの位置づけを表したのが以下の図になります。(引用元はこちら)
![AI、機械学習、ディープラーニングの違いを説明できますか?機械学習と統計の違いは? (1/3):MarkeZine(マーケジン)](https://mz-cdn.shoeisha.jp/static/images/article/29471/29471_01.jpg)
要するに、機械学習とはAIを実現するための手段なのです。
ディープラーニングは、機械学習の中のひとつの手法(アルゴリズム)という位置づけになります。
機械学習は大きく分けると3パターン
機械学習には大きく「教師あり学習」「教師なし学習」「強化学習」の3つの学習方式があります。
それぞれの特徴を以下に簡単にまとめます。
- 正解データ(教師データ)ありで学習する方式
- 主な処理パターン
- 分類:「カテゴリ」を予測
- 回帰:「数値」を予測
- 時系列分析:過去データから未来の数値を予測
- 正解データなしで学習する方式、分析に近い
- 主な処理パターン
- アソシエーション分析:「ある商品を購入した顧客が同時に購入しそうな商品」を分析
- クラスタリング:「ある特徴を有するグループ」に分類
- 次元圧縮:多次元データを少ない次元数に圧縮することで、データの特徴を分析
- 「報酬」をもとに行動を学習する方式
- 代表例
- 囲碁AI:対局を重ねる中でデータを収集して学習
- お掃除ロボット:動きながらデータを収集して学習
機械学習プロジェクトの進め方
では、実際に「機械学習の力で営業成績を上げよう!」といったプロジェクトをどう進めればよいのでしょうか?
ざっくり以下の5つのSTEPが必要になります。
- 機械学習の適用領域選択
- 「処理パターン」とセットで、ビジネスのどの部分を機械学習で効率化するか決める
- データの入手・確認
- 目的を実現するために必要なデータの「目利き」を行う
- 必要なデータを入手して、品質(欠損値や異常値の有無など)のチェックをする
- データ加工
- データを機械学習に活用できる状態にするためにデータの集計や加工をする
- モデル開発
- データの読み込み ~ チューニングまでを行う(詳細後述)
- 評価
- 開発したモデルが実際に使えるものかどうか確認する
どんなメンバーが必要か
機械学習プロジェクトを進めるには、「業務専門家」「データエンジニア」「データサイエンティスト」が必要です。
主な役割については以下の通り。
- 業務専門家
- 役割
- 「機械学習の適用領域選択」を行う
- 目的達成のために「どのタイプの機械学習をあてはめると良いか」「どんなデータを使うと良いか」などのアイデア出しをする
- スキル
- プロジェクトの対象となる業務に関する深い知識・経験を持っている
- 機械学習プロジェクトを1人で全部できるスキルを有している(理想)
- 機械学習モデルの目利きができる
- 役割
- データエンジニア
- 役割
- 「データの入手・確認・加工」を行う
- 機械学習モデル作成用に整形された表形式のデータを準備する
- 役割
- データサイエンティスト
- 役割
- 「機械学習モデルの開発・評価」を行う
- できる限り高い精度のモデルを開発する
- 役割
機械学習モデルの開発STEP
メインとなる機械学習モデルの開発は以下のSTEPで進めます。
- データ読み込み
- 学習データをPython上で扱えるように読み込む
- CSVファイル読み込みによる方法、web上に公開されているZIPファイルをダウンロードする方法などがある
- データ確認
- 欠損値や異常値の有無がないかチェックする
- 平均や分散などの統計量を基にデータの特性を把握する
- データ前処理
- 欠損値の修正や不要なデータの削減などを行う
- 機械学習モデルに入力できるように、データ形式の変換などを行う
- データ分割
- 左右の分割:「入力データx(入力変数)」と「正解データy(目的変数)」に分割する
- 入力データ:機械学習モデルに入力する値
- 正解データ:モデルの予測結果との比較対象となる値
- 上下の分割:「訓練データ」と「検証データ」に分割する
- 訓練データ:学習で利用するデータ
- 検証データ:モデルの精度検証に利用するデータ
- 左右の分割:「入力データx(入力変数)」と「正解データy(目的変数)」に分割する
- アルゴリズム選択
- 目的を実現するために最適なアルゴリズム(モデルを実装するための処理方法)を選択する
- 代表的なアルゴリズム
- 分類:ロジスティック回帰、SVM、決定木
- 回帰:XGBRegressor
- 時系列分析:Prophet
- 学習
- 「訓練データ」を基に学習を行う
- fit関数呼び出しの1行の処理で完了する
- 「訓練データ」を基に学習を行う
- 予測
- 「検証データ」を基に予測を行い、「予測結果」を出力する
- predict関数呼び出しの1行の処理で完了する
- 「検証データ」を基に予測を行い、「予測結果」を出力する
- 評価
- 「予測結果」と「正解データ」が「どの程度近いか」で評価を行う
- 代表的な評価指標
- 精度:全体件数のうち「正解」だった割合(正解率)
- 正解データの「陽性」と「陰性」のバランスが良く、特にどちらの値が重要という区分けがない場合に用いる
- 適合率:「陽性」と予測した対象のうち、本当に「陽性」だった割合
- 「陽性」の予測結果の正確性が重要な場合に用いる(営業成約の予測など)
- 再現率:本当に「陽性」だったデータのうち、モデルで「陽性」と検知できた割合
- 「陽性」をできる限り漏れなく見つけ出したい場合に用いる(病気疾患の検知など)
- F値:適合率と再現率の中間的な指標
- 適合率と再現率をどちらもバランス良く評価したい場合に用いる
- 精度:全体件数のうち「正解」だった割合(正解率)
- チューニング
- 機械学習モデルが業務で使えるレベルになるまで試行錯誤して精度を上げる
- 具体的な手法
- アルゴリズム選択
- 複数のアルゴリズムに対して同じデータで学習・予測をし、精度を比較する
- パラメータチューニング
- 「交差検定法」と「グリッドサーチ」を用いて、ハイパーパラメータの最適化を行う
- 特徴量最適化
- 入力データ自体に手を加えて精度を改善するアプローチ、いわゆる特徴量エンジニアリングを指す
- 欠損値の処理やOne-Hotエンコーディング、正規化などを行う
- アルゴリズム選択
各ステップで実際に利用するpythonコードをまとめた【Python入門】初心者必見!やりたいことから探す『逆引きPython使い方辞典』もぜひ併せてご覧下さい。
参考文献
今回の記事では、赤石雅典さんが書かれたPythonで儲かるAIをつくるを参考にさせていただきました。
本書では実際のコードを書きながら、一連の開発の流れを体験することができるので、ぜひお手に取っていただければ幸いです。