機械学習を用いた離職予測モデルの構築と精度向上手法

離職予測モデルの精度と説明性を両立する:不均衡データ対策とXAI活用術

約15分で読めます
文字サイズ:
離職予測モデルの精度と説明性を両立する:不均衡データ対策とXAI活用術
目次

「モデルのテスト精度(Accuracy)は95%を超えました!これで離職予備軍を早期発見できます」

意気揚々と人事部長に報告した数ヶ月後、次のような言葉を投げかけられたことはありませんか?

「先月辞めた従業員、リストに入っていなかったよね?それに、リストアップされた従業員について『なぜ辞めそうなのか』を聞いても、AIが決めたからとしか答えてくれない。これでは現場への介入なんてできないよ」

もしこの状況に心当たりがあるなら、「不均衡データの罠」と「説明責任の欠如」という、ピープルアナリティクスにおける2つの巨大な壁に直面しています。

Pythonでscikit-learnやXGBoostを回すことは簡単です。しかし、実務の人事データは教科書のように綺麗ではありません。離職者は圧倒的に少なく、そのシグナルは微弱です。そして何より、予測の結果が「人のキャリア」に直結するため、高い説明責任が求められます。

本記事では、コードを書く手前の「設計思想」と、現場の業務フローに組み込んで活用するための「エンジニアリング」について解説します。単なる予測スコアを出すだけでなく、組織のアクションを変えるための現実的なAI活用術を一緒に見ていきましょう。

離職予測モデルが「使われない」本当の理由

多くのデータ分析担当者が最初に陥るのが、「精度(Accuracy)」への過度な執着です。コンペティションでは精度こそが正義ですが、ビジネス、特に人事領域ではその常識が通用しないことが多々あります。

高精度モデルが現場で失敗するパラドックス

実務の現場では、離職予測プロジェクトが頓挫してしまうケースが散見されます。担当者が優秀なエンジニアで、構築したモデルの正解率が96%を誇っていたとしても、現場からは「役に立たない」と一蹴されてしまうことがあるのです。

原因を調査すると、モデルは「誰も辞めない」と予測する傾向が極めて強いことがわかります。つまり、本当に見つけたい「離職リスクのある従業員」をことごとく見逃してしまうのです(False Negative)。一方で、人事担当者が求めているのは、多少の誤報(False Positive)があっても構わないから、「辞めそうな人を一人残らずリストアップしてほしい(高いRecall)」ということだったりします。

技術的な指標の最適化と、ビジネス上の要求(この場合は離職防止)との間にズレが生じている。これが失敗の根本原因です。

「正解率95%」の嘘:Accuracyの罠

なぜこのようなことが起きるのでしょうか。それは人事データの性質に起因します。

例えば、従業員数が1,000人の会社で、年間離職率が5%だとします。つまり、離職者は50人、残留者は950人です。

もし仮に、「全員残留します」とだけ答えるAIを作ったとしましょう。このAIの正解率はどうなるでしょうか。

$ 950 \div 1000 = 0.95 $

なんと、何も考えずに「全員残留」と答えるだけで、95%の正解率(Accuracy)が出てしまうのです。これが「Accuracyの罠」です。

不均衡なデータセットにおいて、Accuracyはモデルの性能を正しく評価できません。95%という数字に安心してデプロイした結果、肝心の離職者50人を全員見逃してしまう。これでは何のためのモデルかわかりません。

AI導入において目指すべきは、全体の正解率を高めることではなく、「砂浜に落ちた針(離職者)」をいかに効率よく見つけ出すかという問題設定に切り替えることです。

原則:人事データ特有の「不均衡」と向き合う

この問題を技術的に定義すると、「不均衡データ(Imbalanced Data)問題」となります。製造業の不良品検知や、クレジットカードの不正利用検知と同じ構造ですが、人事データは「人間の行動」というさらに複雑な要素を含んでいます。

不均衡データ(Imbalanced Data)の本質的課題

機械学習モデルの多くは、学習データ内のクラス分布が均衡していることを前提としています。離職(ポジティブ)と残留(ネガティブ)が半々であれば、モデルは両方の特徴を公平に学習します。

しかし、離職者が全体の数%しかいない場合、モデルは学習プロセスにおいて「離職」という事象をノイズや例外として扱ってしまいがちです。損失関数(Loss Function)を最小化しようとする際、圧倒的多数を占める残留クラスの正解率を上げた方が、手っ取り早くスコアが良くなるからです。

結果として、決定境界(Decision Boundary)は多数派クラスに有利なように引かれ、少数派クラスの予測能力が著しく低下します。

評価指標の再定義:F1-scoreとAUC-ROC

では、どうすればよいのでしょうか。まずは評価指標を変えることから始めます。

プロジェクトの初期段階で設定することが考えられるのは、再現率(Recall)適合率(Precision)、そしてその調和平均であるF1-scoreです。

  • Recall(再現率): 実際に離職した人のうち、モデルが正しく「離職する」と予測できた割合。「見逃し」を減らしたい場合に重要。
  • Precision(適合率): モデルが「離職する」と予測した人のうち、実際に離職した割合。「オオカミ少年」になるのを防ぎたい場合に重要。

人事施策において、この2つはトレードオフの関係にあります。

「とにかく離職の兆候がある人全員に面談したい」のであればRecallを重視すべきですし、「限られた予算で引き留め工作を行うため、確度の高い人だけに絞りたい」のであればPrecisionを重視すべきです。

また、モデルの全体的な識別能力を測る指標としてAUC-ROC(Area Under the Curve - Receiver Operating Characteristic)も有効です。これはクラスの不均衡に影響されにくく、ランダムな予測(AUC=0.5)に対してどれだけ優れているかを判断できます。

まずは、現場の課題を深く掘り下げ、ビジネスゴールに合わせて「どの指標をKPIにするか」を人事担当者と合意することが重要です。これが実務に即したエンジニアリングの第一歩となります。

実践①:サンプリング手法によるデータバランスの適正化

原則:人事データ特有の「不均衡」と向き合う - Section Image

評価指標が決まったら、次はデータそのものに手を加えます。不均衡データへのアプローチとして最も一般的なのが「サンプリング」です。

アンダーサンプリングとオーバーサンプリングの使い分け

サンプリングには大きく分けて2つの方向性があります。

  1. アンダーサンプリング(Under-sampling): 多数派(残留者)のデータを間引いて、少数派(離職者)の数に合わせる。
  2. オーバーサンプリング(Over-sampling): 少数派(離職者)のデータを水増しして、多数派の数に合わせる。

アンダーサンプリングは計算コストが下がるメリットがありますが、貴重なデータを捨ててしまうため、情報の損失が大きいというデメリットがあります。特に人事データは元々のサンプル数が数千〜数万程度と少ないことが多いため、安易にデータを捨てるのは危険です。

一方、オーバーサンプリングはデータを捨てませんが、単純に同じデータをコピーして増やすだけでは、モデルがその特定のデータに過剰適合(Overfitting)してしまうリスクがあります。

SMOTE(Synthetic Minority Over-sampling Technique)の活用

そこで推奨されるのが、SMOTEという手法です。これは単純なコピーではなく、「擬似的なデータ」を生成するアルゴリズムです。

SMOTEの仕組みは非常に直感的です。

  1. 少数派クラス(離職者)のデータからランダムに1つ選ぶ。
  2. そのデータの「近傍(似ているデータ)」にある別の離職者データを見つける。
  3. その2つのデータの間に線を引く。
  4. その線上のどこかに、新しいデータポイントを作成する。

これにより、既存のデータの傾向を保ちつつ、データのバリエーションを増やすことができます。例えば、「Aさんと似たような傾向を持つ架空のBさん」を作り出し、モデルに「こういうパターンの人は辞めやすい」と教え込むイメージです。

Pythonの imbalanced-learn ライブラリを使えば、わずか数行で実装可能です。SMOTEを適用するだけでRecallが10〜20ポイント改善することも考えられます。

実務におけるハイブリッドアプローチ

ただし、SMOTEも万能ではありません。外れ値(ノイズ)まで増幅してしまう可能性があるからです。

より高度なアプローチとして、アンダーサンプリングとオーバーサンプリングを組み合わせる方法や、Balanced Random Forestのように、アルゴリズム内部でブートストラップサンプリング時にバランスを取る手法も有効です。

重要なのは、「検証データ(Validation Data)やテストデータ(Test Data)にはサンプリングを適用しない」ということです。サンプリングはあくまで「学習」を助けるためのテクニックであり、評価は「現実の分布(不均衡な状態)」で行わなければ、実運用での性能を見誤ることになります。

実践②:離職シグナルを捉える特徴量エンジニアリング

データバランスを整えたら、次はモデルに入力する「情報(特徴量)」の質を高めます。ここがデータ分析の腕の見せ所であり、業務プロセスへの理解が最も活きるフェーズです。

静的属性(属性データ)から動的行動(行動ログ)へ

多くの初期モデルは、「年齢」「性別」「勤続年数」「所属部署」といった静的属性ばかりを使っています。しかし、これらは「離職のしやすさ」のベースラインを示すだけで、「今、辞めそうか」というタイミングを捉えることはできません。

離職は「状態」ではなく「イベント」です。その予兆を捉えるには、動的行動(Behavior)の変化に着目する必要があります。

  • 勤怠データ: 残業時間の急増、あるいは急減(転職活動のための定時退社など)、遅刻・早退の増加、有給休暇の取得パターンの変化。
  • アクセスログ: 社内ポータルへのアクセス頻度の低下、特定のファイル(就業規則や退職金規定など)の閲覧。
  • コミュニケーション: チャットツールでの発言数の減少、返信速度の低下。

これらは、従業員のエンゲージメント低下をリアルタイムに反映する強力なシグナルとなります。

「変化率」と「乖離度」の変数化

単に「残業時間が40時間」という絶対値を入れるだけでは不十分です。その40時間が、その人にとって「いつも通り」なのか「急増した」のか、あるいは「部署平均より多い」のか「少ない」のかによって意味合いが異なるからです。

作成することが考えられる特徴量は以下の通りです。

  1. 時間的変化(Trend):

    • (今月の残業時間)-(過去3ヶ月の平均残業時間)
    • (今月の評価スコア)-(前回の評価スコア)
    • これらがマイナスやプラスに大きく振れた時、何かが起きていると考えられます。
  2. 相対的乖離(Deviation):

    • (本人の給与)-(同等級・同職種の平均給与)
    • (本人の残業時間)-(チームの平均残業時間)
    • 「周りは帰っているのに自分だけ残っている」「周りより給与が低い」といった相対的剥奪感が離職のトリガーになる可能性があります。

定性データの定量化テクニック

最近では、従業員サーベイ(パルスサーベイ)のフリーコメントや、自己申告のテキストデータも活用が進んでいます。

NLP(自然言語処理)を用いて、コメントの感情分析(Sentiment Analysis)を行い、「ポジティブ/ネガティブスコア」を特徴量として組み込むのです。また、特定のキーワード(「疲れた」「不安」「キャリア」など)の出現頻度をカウントするだけでも、意外なほど精度向上に寄与します。

「データがない」と判断する前に、今あるログデータやテキストデータから「変化」と「差分」を抽出できないか、分析的な視点で検討してみてください。

実践③:XAI(説明可能なAI)で人事のアクションを促す

実践②:離職シグナルを捉える特徴量エンジニアリング - Section Image

高精度なモデルが構築できても、冒頭で述べたように「なぜその予測になったのか」に答えられなければ、現場の業務フローに組み込まれることはありません。ここで不可欠となるのがXAI(Explainable AI:説明可能なAI)のアプローチです。

SHAP値を用いた予測根拠の可視化

現在、実務において予測モデルの解釈に広く採用されている手法の一つがSHAP(SHapley Additive exPlanations)です。これは協力ゲーム理論に基づき、各特徴量が予測結果にどれだけ「貢献」したかを数値化するフレームワークです。

従来の「特徴量重要度(Feature Importance)」では、モデル全体でどの変数が重要か(Globalな説明)という傾向しか把握できませんでした。一方、SHAPを用いることで、例えば「ある特定の従業員Aさんが、なぜ80%の離職確率と判定されたのか」という個別具体の理由(Localな説明)を算出することが可能になります。

なお、SHAPライブラリはPython環境などで利用可能ですが、最新の実装手順やサポートされるモデルについては、必ず公式ドキュメント等で確認するようにしてください。

「なぜ辞めそうなのか」を個別に提示する

例えば、ある従業員Aさんの離職スコアが高い理由として、SHAP値を用いると以下のような要因分解が可能になります。

  • ベースライン(全社員平均):10%
  • 残業時間の急増:+30%
  • 同僚との給与乖離:+20%
  • 勤続年数:-5%(ベテラン層であり、離職抑制要因として作用)
  • 合計予測値:55%

このようにブラックボックスになりがちなスコアの中身が分解されれば、人事は「Aさんは残業過多と給与への相対的な不満が主要因であるため、まずは業務量の調整と、次回の昇給面談でのケアを行おう」という具体的なアクションプランを立てることができます。

逆に、Bさんの離職リスクが高い理由が「遠距離通勤」や「家庭の事情」に関連する変数であれば、介入の方法は「リモートワークの提案」や「勤務形態の柔軟化」になるといった判断が可能です。

予測結果を人事介入施策(リテンション)に繋げるフロー

離職予測プロジェクトにおいて推奨されるのは、予測リストを渡す際に、必ずこの「トップ3の寄与要因」をセットで提示することです。

単なる「離職予備軍リスト」だけでは、人事担当者に「どうすればいいのか分からない」という心理的負担を与える可能性があります。しかし、「要因付きリスト」として提供することで、それは「解決すべき課題リスト」へと変わり、前向きなアクションを誘発します。

TableauやPower BIなどのBIツールを用いてSHAP値を可視化し、人事がインタラクティブに要因を確認できるダッシュボード環境を整えること。ここまで実装して初めて、AIは既存の業務フローに溶け込み、具体的なビジネス価値を生み出すと言えるでしょう。

参考リンク

避けるべきアンチパターンと倫理的配慮

実践③:XAI(説明可能なAI)で人事のアクションを促す - Section Image 3

最後に、技術以前にプロフェッショナルとして守るべきラインについてお伝えします。

未来情報のリーケージ(Data Leakage)

技術的なミスで最も多いのが「リーケージ」です。例えば、「退職面談の日程」や「有給消化期間フラグ」といったデータを学習に入れてしまうケースです。

これらは「離職が決まった後」に発生するデータであり、予測時点では知り得ない情報です。これを入れると精度は驚くほど上がりますが、実運用では全く使い物になりません。時系列を厳密に管理し、予測時点(例えば毎月1日)で入手可能なデータのみを使用することを徹底してください。

差別の助長と公平性(Fairness)の担保

AIは過去のデータを学習します。もし過去の人事評価や昇進にバイアス(性別や国籍による差別など)があった場合、AIはその差別構造を「正解」として学習し、再生産してしまいます。

「女性だから離職しやすい」「特定の国籍だからスコアが低い」といった判定が出ないよう、公平性(Fairness)のチェックが必要です。場合によっては、センシティブな属性(性別、人種など)をあえてモデルから除外したり、公平性を担保するアルゴリズム(Adversarial Debiasingなど)を適用する判断も求められます。

「予測」を「予言」と勘違いするリスク

最も懸念されるのは、AIの予測が「予言」として扱われ、自己成就予言(Self-fulfilling Prophecy)になってしまうことです。

「AIが辞めると言っているから、この人には重要なプロジェクトを任せないでおこう」とマネージャーが判断した場合、やりがいを奪われたその従業員は、本当に辞めてしまう可能性があります。

AIを活用する組織は、常に啓蒙し続ける必要があります。「これはあくまで確率であり、運命ではない。適切なケアを行えば、未来は変えられる」という前提を共有することが不可欠です。

まとめ:データで「人の心」に寄り添うために

離職予測モデルの構築は、単なる分類タスクではありません。不均衡データという数理的な課題を解き、特徴量エンジニアリングで人の行動心理を読み解き、XAIで現場との信頼関係を築く、総合的な取り組みです。

難易度が高い分、成功した時のインパクトは絶大です。貴重な人材の流出を防ぎ、組織全体の健全性を高めることができるからです。

本記事で紹介したテクニック——評価指標の再定義、SMOTEによるデータ生成、動的特徴量の設計、そしてSHAPによる説明——は、どれも実務に即した現実的な解決策の第一歩となります。ぜひ、実際の業務プロセスへの組み込みを検討してみてください。

離職予測モデルの精度と説明性を両立する:不均衡データ対策とXAI活用術 - Conclusion Image

コメント

コメントは1週間で消えます
コメントを読み込み中...