プロジェクト概要
前提条件
- Pythonプログラミングの基本的な知識(変数、関数、クラスの概念)
- VSCodeエディタの基本操作ができること
- ターミナル(コマンドライン)の基本的な使用経験
- 中学校レベルの数学知識(確率、統計の基本概念)
開発環境
- Python 3.8以上
- VSCode(Visual Studio Code)
- Jupyter Notebook
プロジェクト内容
このプロジェクトでは、TensorFlowのKerasを使用して人工ニューラルネットワーク(ANN)による二値分類モデルを構築します。初心者でも段階的に学習できるよう、データ前処理から最終的なモデル評価まで、2つのステップに分けて実装していきます。
プロジェクトの核となるのは、実際のビジネス課題を想定した退職予測という分類問題です。従業員の様々な属性データから、退職の可能性を予測するANNモデルを構築することで、実際の企業でも活用できる実用的な機械学習モデルを開発します。
実装内容
- Kerasによる多層ニューラルネットワーク構築
- カテゴリカルデータのエンコーディング(ラベルエンコーディング、ワンホットエンコーディング)
- 特徴量スケーリングとデータ前処理
- Adam最適化アルゴリズムとバイナリクロスエントロピー損失の実装
- 混同行列による詳細なモデル評価
- Jupyter Notebookを使用した対話型開発環境
得られるスキル
- TensorFlow(ディープラーニングフレームワークの基本操作)
- ANN構築技術(フィードフォワードニューラルネットワーク設計)
- データ前処理技術(エンコーディング、標準化、データ分割)
- モデル評価手法(混同行列、精度計算、性能分析)
得られる経験
- 実際のビジネス課題への機械学習適用経験
- 10,000件規模のデータセット処理と分析
- Jupyter Notebookでの対話型開発環境の活用
得られる成果物
- 完全に動作するANN分類モデル
- 完全なJupyter Notebookソースコード
このプロジェクトから応用できること
- 顧客離脱予測モデルをANNで構築し企業の顧客維持戦略を支援
- 製品の品質判定システムをANNで開発し製造業の品質管理を自動化
- 医療診断補助システムをANNで作成し診断精度の向上をサポート
- 株価予測モデルをANNで構築し投資判断の参考情報を提供
- マーケティング効果予測をANNで分析し広告戦略の最適化を実現
Step1:プロジェクト構成の作成と環境構築
このステップでは、従業員退職予測のためのANNプロジェクトを始めるための開発環境を整備し、必要なファイル構造を作成していきます。プログラミングを始める前の準備段階として、とても重要な作業になります。
プロジェクトフォルダの作成
まず、プロジェクトを管理するためのフォルダを作成しましょう。
Windows・macOS共通
- デスクトップや任意の場所に新しいフォルダを作成します
- フォルダ名は「employee_retention_predictor」に設定します
このフォルダが、今回のプロジェクト全体を管理するルートディレクトリとなります。
VSCodeでプロジェクトを開く
作成したプロジェクトフォルダをVSCodeで開きましょう。
- VSCodeを起動します
- 「ファイル」→「フォルダーを開く」を選択します
- 先ほど作成した「employee_retention_predictor」フォルダを選択します
- 「フォルダーの選択」をクリックします
VSCodeの左側にエクスプローラーパネルが表示され、現在のプロジェクトフォルダの中身が確認できるようになります。
仮想環境の作成とアクティベート
Python開発において仮想環境は非常に重要です。仮想環境とは、プロジェクトごとに独立したPython実行環境を作成する仕組みのことです。これにより、プロジェクト間でのライブラリの競合を防ぎ、クリーンな開発環境を維持できます。
Windows環境での仮想環境作成
- VSCodeの上部メニューから「ターミナル」→「新しいターミナル」を選択
- 以下のコマンドで仮想環境を作成します
python -m venv dl_env
- 仮想環境をアクティベートします
dl_env\Scripts\activate
macOS環境での仮想環境作成
- VSCodeの上部メニューから「ターミナル」→「新しいターミナル」を選択
- 以下のコマンドで仮想環境を作成します
python3 -m venv dl_env
- 仮想環境をアクティベートします
source dl_env/bin/activate
重要なポイント
- 仮想環境名は「dl_env」として作成
- ターミナルの行頭に「(dl_env)」と表示されることを確認
- この表示があることで、仮想環境が正常にアクティベートされていることがわかります
プロジェクトファイル構造の作成
次に、今回の従業員退職予測プロジェクトに必要なフォルダとファイルを作成していきます。VSCodeのエクスプローラーパネルを使用してファイルを作成しましょう。
データセット用フォルダの作成
- VSCodeの左側エクスプローラーパネルで「新しいフォルダ」アイコン(フォルダの絵とプラスのマークがあるアイコン)をクリック
- フォルダ名を「dataset」として作成
この「dataset」フォルダは、機械学習で使用するデータファイルを格納するための専用フォルダです。今回のプロジェクトでは、日本企業の従業員情報が記録されたCSVファイルがここに保存されます。
Notebook用フォルダの作成
- 同じくエクスプローラーパネルで「新しいフォルダ」アイコンをクリック
- フォルダ名を「notebook」として作成
「notebook」フォルダは、Jupyter Notebookファイルを保管するためのフォルダです。データ分析や機械学習の実装を行うNotebookファイルをこのフォルダ内で管理します。
メインNotebookファイルの作成
- 先ほど作成した「notebook」フォルダをクリックして選択
- 「新しいファイル」アイコン(ファイルの絵とプラスのマークがあるアイコン)をクリック
- ファイル名を「workforce_analysis.ipynb」として作成
この「workforce_analysis.ipynb」ファイルが、今回の従業員退職予測モデルを実装するメインプログラムとなります。.ipynb拡張子はJupyter Notebookファイルであることを示しており、データ分析や機械学習の開発によく使用される対話型のプログラム実行環境です。
従業員データCSVファイルの取得
今回のプロジェクトで使用する日本企業の従業員情報データセットをダウンロードしましょう。
下記リンクから「employee_data.csv」ファイルをダウンロードしてください。
ダウンロードが完了したら、ファイルを「dataset」フォルダ内に配置してください。
「employee_data.csv」ファイルには、以下のような日本企業の従業員情報が含まれています
- 従業員ID – 各従業員の一意識別番号
- 年齢 – 従業員の年齢情報
- 性別 – 男性・女性の区分
- 部署 – 営業部、開発部、人事部などの所属部署
- 勤続年数 – 入社からの経過年数
- 給与 – 年収情報(万円単位)
- 評価スコア – 人事評価の点数
- 残業時間 – 月間平均残業時間
- 有給取得日数 – 年間有給休暇取得日数
- 退職フラグ – 実際に退職したかどうかの結果(0=在籍、1=退職)
このデータセットは、日本の労働環境に特化した特徴量を含んでおり、ANNを使用した退職予測モデルの学習に最適化されています。
依存関係管理ファイルの作成
- プロジェクトのルートフォルダ(employee_retention_predictor)をクリックして選択
- 「新しいファイル」アイコンをクリック
- ファイル名を「requirements.txt」として作成
requirements.txtファイルは、Pythonプロジェクトで使用する外部ライブラリとそのバージョンを記録するための重要なファイルです。これにより、他の開発者や本番環境でも同じライブラリ環境を再現できます。
requirements.txtの内容設定
作成した「requirements.txt」ファイルをVSCodeで開き、以下の内容を記述してください。
numpy==1.26.4
pandas==2.3.0
tensorflow==2.16.2
scikit-learn==1.7.0
matplotlib==3.10.3
seaborn==0.13.2
jupyter==1.1.1
今回のプロジェクトでは、以下のライブラリを使用します
- numpy – 数値計算を効率的に行うためのライブラリです。配列や行列の操作、数学関数の実行などに使用します
- pandas – データ分析や操作を行うためのライブラリです。CSVファイルの読み込みやデータの前処理に使用します
- tensorflow – ANNを構築するためのディープラーニングフレームワークです。ニューラルネットワークの作成と学習に使用します
- scikit-learn – 機械学習のアルゴリズムやツールを提供するライブラリです。データの前処理や評価指標の計算に使用します
- matplotlib – グラフや図表を作成するためのライブラリです。データの可視化や結果の表示に使用します
- seaborn – 統計データの可視化を美しく行うためのライブラリです。データの分布や相関関係の可視化に使用します
- jupyter – Jupyter Notebookを実行するためのライブラリです。対話型のプログラム実行環境を提供します
プロジェクト構造の確認
この時点で、VSCodeのエクスプローラーパネルには以下のような構造が表示されているはずです。
employee_retention_predictor/
├── dl_env/ # 仮想環境フォルダ
├── dataset/
│ └── employee_data.csv # 従業員データCSVファイル
├── notebook/
│ └── workforce_analysis.ipynb # メインNotebookファイル
└── requirements.txt # 依存関係管理ファイル
この基本構造が、今回の従業員退職予測プロジェクトの基盤となります。
仮想環境が正常にアクティベートされていることを再度確認し(ターミナルに「(dl_env)」が表示されている状態)、次のステップに進む準備を整えましょう。
ライブラリのインストール
仮想環境がアクティベートされている状態で、VSCodeのターミナルから以下のコマンドを実行します。
pip install -r requirements.txt
このコマンドにより、requirements.txtに記載されたすべてのライブラリがインストールされます。ANNの実装に必要なTensorFlowや、データ処理に必要なpandasなど、重要なライブラリが一括でインストールされます。
インストール処理には数分程度かかる場合がありますので、しばらくお待ちください。インストールが完了すると、ターミナルに「Successfully installed」のようなメッセージが複数表示され、プロジェクトの環境準備が完了します。
Jupyter Notebookの起動
- VSCodeのターミナルで以下のコマンドを実行します
jupyter notebook
- ブラウザが自動的に開き、Jupyter Notebookのインターフェースが表示されます
- 「notebook」フォルダをクリックし、「workforce_analysis.ipynb」ファイルを開きます
Step2:データ前処理とANNモデルの構築・学習
このステップでは、従業員退職予測のためのANNモデルを実装していきます。まずは必要なライブラリをインポートし、データの前処理を行った後、人工ニューラルネットワーク(ANN)を構築・学習させていきます。TensorFlowを使用してディープラーニングモデルを段階的に作成していく過程を詳しく解説します。
Jupyter Notebookの起動
- VSCodeのターミナルで以下のコマンドを実行します
jupyter notebook
- ブラウザが自動的に開き、Jupyter Notebookのインターフェースが表示されます
- 「notebooks」フォルダをクリックし、「animal_classifier.ipynb」ファイルを開きます
必要ライブラリのインポート
最初に、今回のプロジェクトで使用する重要なライブラリをインポートしましょう。新しいセルを作成して以下のコードを入力してください。
# 数値計算と配列操作のためのライブラリ
import numpy as np
# データ操作と分析のためのライブラリ
import pandas as pd
# ディープラーニングフレームワーク
import tensorflow as tf
このセルを実行した後、TensorFlowのバージョンを確認しましょう。
# TensorFlowのバージョンを確認
tf.__version__
これらのライブラリは以下の役割を果たします。NumPyは数値計算を効率的に行うためのライブラリで、配列操作や数学的計算に使用します。Pandasはデータフレームを使ったデータ操作・分析を行うためのライブラリです。TensorFlowは今回のメインとなるディープラーニングフレームワークで、ANNの構築と学習に使用します。
データの前処理
機械学習において、データの前処理は非常に重要なステップです。生のデータをそのまま機械学習モデルに投入しても、良い結果を得ることはできません。データを適切な形式に変換し、モデルが効率的に学習できる状態に整える必要があります。データサイエンティストの仕事の70%は、このデータ前処理段階にあると言われており、効率的な前処理テンプレートとツールキットを持つことが非常に重要です。
データセットの読み込み
まず、従業員データを読み込んで内容を確認しましょう。新しいセルを作成して以下のコードを実行してください。
# CSVファイルからデータセットを読み込み
employee_dataset = pd.read_csv('../dataset/employee_data.csv')
# 従業員IDと目的変数を除いた特徴量を取得(1列目から最後から2列目まで)
feature_matrix = employee_dataset.iloc[:, 1:-1].values
# 最後の列(退職フラグ)を目的変数として取得
target_vector = employee_dataset.iloc[:, -1].values
# 特徴量行列の内容を確認
print(feature_matrix)
[[38 '男性' '営業部' ... 3.2 58 5]
[33 '男性' '開発部' ... 2.8 63 9]
[40 '男性' '製造部' ... 4.0 27 10]
...
[29 '男性' '総務部' ... 1.4 14 13]
[38 '女性' '総務部' ... 3.5 14 10]
[40 '女性' '品質管理部' ... 2.0 11 12]]
# 目的変数ベクトルの内容を確認
print(target_vector)
[0 0 0 ... 1 0 1]
このコードでは、特徴量行列(feature_matrix)と目的変数ベクトル(target_vector)を分離しています。iloc[:, 1:-1]
は「全ての行の、2列目から最後から2列目まで」を意味し、従業員IDを除いた特徴量を取得します。従業員IDは各従業員の識別子に過ぎず、退職予測には直接関係ないため除外します。iloc[:, -1]
は「全ての行の最後の列」を意味し、退職フラグ(目的変数)を取得します。
カテゴリカルデータのエンコーディング
機械学習モデルは数値データしか扱えないため、カテゴリカルデータ(文字列で表現されたデータ)を数値に変換する必要があります。今回のデータセットには「性別」と「部署」というカテゴリカルデータが含まれています。これらを適切にエンコーディングすることで、モデルが理解できる形式に変換します。
性別列のラベルエンコーディング
性別のような二値カテゴリカル変数には、ラベルエンコーディングを適用します。この手法では、カテゴリを0と1の数値に変換します。
# scikit-learnからラベルエンコーダーをインポート
from sklearn.preprocessing import LabelEncoder
# ラベルエンコーダーのインスタンスを作成
gender_encoder = LabelEncoder()
# 性別列(インデックス1)にラベルエンコーディングを適用
feature_matrix[:, 1] = gender_encoder.fit_transform(feature_matrix[:, 1])
# エンコーディング後の特徴量行列を確認
print(feature_matrix)
[[38 1 '営業部' ... 3.2 58 5]
[33 1 '開発部' ... 2.8 63 9]
[40 1 '製造部' ... 4.0 27 10]
...
[29 1 '総務部' ... 1.4 14 13]
[38 0 '総務部' ... 3.5 14 10]
[40 0 '品質管理部' ... 2.0 11 12]]
ラベルエンコーディングは、カテゴリカル変数を連続した整数値に変換する手法です。性別の場合、「男性」と「女性」の間には順序関係がない二値データなので数値の大小が意味を持つことはありません。そのため、単純に0と1に変換することで、モデルが処理できる数値データとなります。
部署列のワンホットエンコーディング
部署のような多値カテゴリカル変数には、ワンホットエンコーディングを適用します。この手法では、カテゴリ間に順序関係がない場合に、各カテゴリを独立したバイナリ列として表現します。
# scikit-learnから必要なクラスをインポート
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
# カラム変換器を作成(部署列にワンホットエンコーディングを適用)
column_transformer = ColumnTransformer(
transformers=[('encoder', OneHotEncoder(), [2])],
remainder='passthrough'
)
# 変換を実行してNumPy配列に変換
feature_matrix = np.array(column_transformer.fit_transform(feature_matrix))
# ワンホットエンコーディング後の特徴量行列を確認
print(feature_matrix)
[[0.0 0.0 0.0 ... 3.2 58 5]
[0.0 0.0 0.0 ... 2.8 63 9]
[0.0 0.0 0.0 ... 4.0 27 10]
...
[0.0 0.0 0.0 ... 1.4 14 13]
[0.0 0.0 0.0 ... 3.5 14 10]
[0.0 0.0 1.0 ... 2.0 11 12]]
ワンホットエンコーディングは、順序関係のないカテゴリデータを処理する際に使用される手法です。例えば、8つの部署がある場合、各部署は[1,0,0,0,0,0,0,0]、[0,1,0,0,0,0,0,0]のように表現されます。営業部と開発部の間に優劣や順序が存在しないため、このような独立したバイナリ表現により、モデルが誤った重み付けを行うことを防ぎます。この処理により、ダミー変数が特徴量行列の最初の列に移動することに注意してください。
データセットの分割
機械学習では、汎化性能を評価するために、データセットを学習用とテスト用に分割する必要があります。学習用データでモデルを訓練し、テスト用データで未知のデータに対する性能を評価します。これにより、モデルが新しいデータに対してどの程度正確な予測ができるかを確認できます。
# データ分割用の関数をインポート
from sklearn.model_selection import train_test_split
# データセットを学習用80%、テスト用20%に分割
X_train, X_test, y_train, y_test = train_test_split(
feature_matrix, target_vector, test_size=0.2, random_state=0
)
このコードでは、データセットの20%をテスト用、80%を学習用として分割しています。random_state=0
を設定することで、実行するたびに同じ分割結果を得ることができ、実験の再現性を確保できます。データリークを防ぐため、テストセットは最終的な評価まで使用しません。
特徴量のスケーリング
特徴量スケーリングは、ANNにおいて必須の前処理ステップです。異なる特徴量が異なるスケール(例として年齢は20-65、給与は200-800万円)を持つ場合、給与のようなスケールの大きい特徴量がモデルの予測に過大な影響を与えてしまい、年齢のような小さなスケールの特徴量が適切に評価されない可能性があります。
# 標準化スケーラーをインポート
from sklearn.preprocessing import StandardScaler
# スケーラーのインスタンスを作成
feature_scaler = StandardScaler()
# 学習データに対してスケーリングを学習・適用
X_train = feature_scaler.fit_transform(X_train)
# テストデータに対して同じスケーリングを適用(fitはしない)
X_test = feature_scaler.transform(X_test)
StandardScalerは、各特徴量を平均0、標準偏差1となるように標準化する手法です。これにより、すべての特徴量が同じスケールとなり、ANNが効率的に学習できるようになります。学習データに対してはfit_transform
を使用してスケーラーの学習と変換を同時に行い、テストデータに対してはtransform
のみを使用してデータリークを防ぎます。特徴量スケーリングはディープラーニングには絶対に必要で、ダミー変数のように既に0や1の値を持っている特徴量についても適用する必要があります。
ANNモデルの構築
いよいよ人工ニューラルネットワーク(ANN)を構築していきます。ANNは、人間の脳の神経細胞(ニューロン)の働きを模倣した機械学習モデルです。複数の層からなるネットワーク構造により、複雑なパターンを学習することができます。今回は全結合層のみで構成される、最も基本的なタイプのニューラルネットワークを構築します。
ANNの初期化
TensorFlowのKerasを使用してANNを初期化します。Sequentialモデルは、層を順番に積み重ねる最もシンプルなモデル構築方法です。
# Sequentialモデルでニューラルネットワークを初期化
employee_ann = tf.keras.models.Sequential()
Sequentialモデルは、入力層から出力層まで一方向に層が接続された線形なネットワーク構造を作成します。今回のようなフィードフォワードニューラルネットワークの構築に適しています。フィードフォワードニューラルネットワークとは、情報が入力層から隠れ層、そして出力層へと一方向に流れるタイプのネットワークで、最も基本的なニューラルネットワーク構造です。
入力層と第1隠れ層の追加
ANNの最初の層として、入力層と第1隠れ層を同時に作成します。
# 第1隠れ層を追加(ニューロン数6、活性化関数はReLU)
employee_ann.add(tf.keras.layers.Dense(units=6, activation='relu'))
Dense層は全結合層とも呼ばれ、前の層のすべてのニューロンが次の層のすべてのニューロンと接続される構造です。units=6
は、この層に6個の隠れニューロンを配置することを意味します。この数は経験則ではなく実験に基づいて決定する必要があり、ハイパーパラメータチューニングの対象となります。activation='relu'
は、ReLU(Rectified Linear Unit)活性化関数を指定しており、この関数は負の値を0に、正の値はそのまま出力する特性を持ちます。ReLUは計算が高速で、勾配消失問題を軽減する効果があるため、隠れ層でよく使用されます。入力層は特徴量の数に応じて自動的に作成されます。
第2隠れ層の追加
ディープラーニングの特徴である多層構造を作るため、第2隠れ層を追加します。
# 第2隠れ層を追加(ニューロン数6、活性化関数はReLU)
employee_ann.add(tf.keras.layers.Dense(units=6, activation='relu'))
複数の隠れ層を持つことで、モデルはより複雑なパターンや非線形関係を学習できるようになります。今回は2つの隠れ層を使用することで、浅い学習モデルではなく深い学習モデルを構築し、従業員の退職に影響する複雑な要因の組み合わせを捉えることを目指します。
出力層の追加
最後に、予測結果を出力する出力層を追加します。
# 出力層を追加(ニューロン数1、活性化関数はSigmoid)
employee_ann.add(tf.keras.layers.Dense(units=1, activation='sigmoid'))
出力層ではunits=1
として、単一の出力(退職確率)を生成します。二値分類問題では出力ニューロンが1つだけ必要で、3つ以上のクラスがある多クラス分類の場合はクラス数分の出力ニューロンが必要になります。activation='sigmoid'
は、シグモイド活性化関数を指定しており、この関数は任意の実数値を0から1の間の値に変換します。これにより、出力を確率として解釈することができ、0.5を閾値として二値分類を行うことができます。
ANNモデルの学習
構築したANNモデルを実際に学習させていきます。学習プロセスでは、モデルが入力データから正しい予測を行えるように、重みとバイアスを調整していきます。この過程で確率的勾配降下法を使用して、予測誤差を最小化していきます。
ANNのコンパイル
学習を開始する前に、モデルの学習方法を定義するコンパイルを行います。
# ANNをコンパイル(最適化手法、損失関数、評価指標を設定)
employee_ann.compile(
optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy']
)
optimizer=’adam’は、Adam(最適化アルゴリズム)を指定しています。Adamは学習率を自動調整する機能を持ち、多くの場面で優秀な性能を発揮する最適化手法で、確率的勾配降下法を効率的に実行します。loss=’binary_crossentropy’は、二値分類問題に適したバイナリクロスエントロピー損失を指定しており、予測確率と実際のラベルとの差を効果的に測定します。多クラス分類の場合は’categorical_crossentropy’を使用します。metrics=[‘accuracy’]は、学習中に精度も同時に計算して表示することを指定しています。
学習データでのANN訓練
いよいよモデルの学習を開始します。
# 学習データでモデルを訓練
training_history = employee_ann.fit(
X_train, y_train,
batch_size=32,
epochs=100
)
batch_size=32は、1回の重み更新で使用するデータ数を指定しています。バッチ学習により、メモリ効率を保ちながら安定した学習を行うことができます。通常32が推奨されるデフォルト値です。epochs=100は、全学習データを100回繰り返し学習することを意味します。各エポックで、モデルは徐々に精度を向上させていきます。
学習中は、各エポックでの損失値と精度が表示され、モデルの学習進捗を確認することができます。通常、エポック数を重ねるごとに精度が向上し、損失が減少していく様子を観察できます。
予測の実行とモデル評価
学習が完了したANNモデルを使用して、実際の予測を行い、性能を評価していきます。この段階では、モデルをプロダクション環境で使用する際と同様の方法で予測を実行します。
特定の従業員の退職予測
まず、特定の従業員情報を使用して退職予測を行ってみましょう。これは実際のビジネス環境でモデルを活用する際の典型的な使用方法です。
予測例 以下の情報を持つ従業員の退職予測を行います。
- 年齢: 35歳
- 性別: 男性
- 部署: 開発部
- 勤続年数: 5年
- 給与: 450万円
- 評価スコア: 3.2
- 残業時間: 45時間
- 有給取得日数: 10日
# 特定の従業員データで退職予測を実行
sample_prediction = employee_ann.predict(
feature_scaler.transform([[35, 1, 0, 0, 0, 0, 0, 0, 0, 1, 5, 450, 3.2, 45, 10]])
)
# 予測確率を表示
print(f"退職確率: {sample_prediction[0][0]:.3f}")
# 0.5を閾値として二値分類の結果を表示
print(f"予測結果: {'退職' if sample_prediction[0][0] > 0.5 else '在籍'}")
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
退職確率: 0.880
予測結果: 退職
重要な注意点1: 入力データは必ず二重括弧で囲む必要があります。predict
メソッドは常に2次元配列を期待するためです。単一の観測であっても2次元配列として入力する必要があります。
重要な注意点2: カテゴリカルデータは、前処理で行ったエンコーディングと同じ形式で入力する必要があります。部署「開発部」は、ワンホットエンコーディングの結果として該当する列が1になり、その他の部署の列は0になります。ダミー変数は常に最初の列に作成されることを忘れてはいけません。
重要な注意点3: 学習時と同じスケーリングを適用する必要があります。feature_scaler.transform()
を使用して、同じ基準で標準化を行います。fit_transform
ではなくtransform
のみを使用することで、データリークを防ぎます。
テストセット全体の予測
次に、テストセット全体に対して予測を行い、実際の結果と比較します。
# テストセット全体で予測を実行
y_predictions = employee_ann.predict(X_test)
# 予測確率を二値分類結果に変換(0.5を閾値として使用)
y_predictions_binary = (y_predictions > 0.5)
# 予測結果と実際の結果を並べて表示
comparison_results = np.concatenate(
(y_predictions_binary.reshape(len(y_predictions_binary), 1),
y_test.reshape(len(y_test), 1)), 1
)
print(comparison_results)
63/63 ━━━━━━━━━━━━━━━━━━━━ 0s 1ms/step
[[0 0]
[0 0]
[0 0]
...
[0 1]
[0 0]
[0 0]]
この結果により、各テストデータに対する予測結果と実際の結果を並べて確認することができます。左の列が予測結果、右の列が実際の結果を表しており、モデルの性能を直感的に把握できます。
混同行列による評価
最後に、混同行列(Confusion Matrix)を作成して、モデルの性能を詳細に評価します。
# 混同行列と精度スコアの計算用関数をインポート
from sklearn.metrics import confusion_matrix, accuracy_score
# 混同行列を計算
confusion_matrix_result = confusion_matrix(y_test, y_predictions_binary)
# 最終的な精度を計算
final_accuracy = accuracy_score(y_test, y_predictions_binary)
# 結果を表示
print("混同行列:")
print(confusion_matrix_result)
print(f"最終精度: {final_accuracy:.3f}")
混同行列:
[[1584 14]
[ 383 19]]
最終精度: 0.801
混同行列は、分類モデルの性能を評価する重要な指標です。以下の4つの要素から構成されます。
- True Negative(TN): 実際に在籍で、正しく在籍と予測
- False Positive(FP): 実際に在籍だが、誤って退職と予測
- False Negative(FN): 実際に退職だが、誤って在籍と予測
- True Positive(TP): 実際に退職で、正しく退職と予測
この評価により、モデルがどの程度正確に従業員の退職を予測できるかを定量的に把握することができます。精度が80%程度得られれば、100人の従業員のうち80人について正しい予測ができることを意味し、実用的なレベルの性能と言えるでしょう。
まとめ
このプロジェクトを通じて、TensorFlowのKerasを使用したANN実装の基礎から実践的な応用まで幅広く学習することができました。
得られたスキル
- TensorFlow – ディープラーニングフレームワークの基本操作
- ANN構築技術 – フィードフォワードニューラルネットワーク設計
- データ前処理技術 – エンコーディング、標準化、データ分割
- モデル評価手法 – 混同行列、精度計算、性能分析
得られた経験
- 実際のビジネス課題への機械学習適用経験
- 10,000件規模のデータセット処理と分析
- Jupyter Notebookでの対話型開発環境の活用
得られた成果物
- 完全に動作するANN分類モデル
- 完全なJupyter Notebookソースコード
次に学ぶべきこと
- CNNを使用した画像分類技術の学習
- RNNによる時系列データ分析の実装
- ハイパーパラメータチューニングによる精度向上技術の習得
- データ可視化ライブラリ(matplotlib、seaborn)の活用
- 前処理手法の追加(特徴量選択、データ拡張)の実装
このプロジェクトから応用できること
このANN技術を基盤として、様々な業界での予測ニーズに対応できるサービスを開発することが可能です。特に、分類や予測が必要な業務では、高い価値を提供できる技術として活用できます。
- 顧客離脱予測モデルをANNで構築し企業の顧客維持戦略を支援
- 製品の品質判定モデルをANNで開発し製造業の品質管理を自動化
- 医療診断補助モデルをANNで作成し診断精度の向上をサポート
- 株価予測モデルをANNで構築し投資判断の参考情報を提供
- マーケティング効果予測をANNで分析し広告戦略の最適化を実現
本コンテンツへの意見や質問