はじめに
kaggleのような精度を競う場だけではなく実ビジネスにおいてデータ分析する際にも欠損値データに苦慮することが沢山あります。
実ビジネスの機械学習プロジェクトに携わっている立場から欠損値について考察していきます。
データエンジニアリングの手法的なところは他に記事があるのでそちらにお任せします。
欠損値って何?どうするの?
中身がない、「Missing Value」のことです。
データ分析する際に欠損値があると処理が動かなかったり、結果が偏ったりと弊害があることもありデータエンジニアリングで欠損値埋めをしたりすることもあります。ただし闇雲にレコード削除、列削除、平均値埋めなどするのはお勧めしません。データというのは現実を再現する情報なのでそれを削除、改変するのは慎重であるべきと私は考えます。
どうして欠損しているかの確認が最優先
実ビジネスのデータにおいて欠損がある場合は、素直にデータオーナー(データソースの責任者)や業務有識者に確認することを推奨します。なぜなら欠損していることに”意味がある”ことが考えられるからです。
欠損値で検索すると必ず出てくる「MCAR」「MAR」「MNAR」について説明した上でどれですか?と確認することから始めるといいでしょう。
- MCAR(missing completely at random):完全にランダムな欠損
- MAR(missing at random):ランダムな欠損。欠損値以外の要因によって欠損。
- MNAR(missing at random):ランダムではない欠損。欠損値自身の要因によって欠損。
欠損理由の確認が困難なケース
社内システムのデータなら欠損理由は努力次第で確認可能なことが多いですが、厄介なのはオープンデータ含む外部データを使用する場合です。
データマネジメント書籍(DMBOK)では他社購入データについてもデータ品質の対象になっており品質確認が推奨されています。ただ現実として全部が全部確認できるとは限りません。その場合は残念ながら当該項目を欠損値対応した上で使用した分析モデルと項目自体を使用しなかった分析モデルの2つを作って比較するくらいでしょうか。
どれだけ欠損しているかの確認も
実ビジネスにおいて複数データソースの粒度や時点、鮮度を揃えたレコードを作成していくと欠損値割合が非常に多い項目、またはデータソースに出会うことがあります。その場合は使用するデータソースとして最適かを有識者確認することが望ましいです。もし使用する場合もデータソース各項目を使用するのではなく欠損してたかどうかだけを表すフラグ項目を作ることも検討します。
機械学習プロジェクトで実際にあった欠損理由
- 昔は使ってたけど使わなくなった項目
- 後から追加したけど昔はなかった項目
- 任意入力項目
「MCAR」はありませんでした。
どうやって欠損値対応するかも確認が優先
1.,2.とも何故使わなくなったのか、あるいは使うようになったのかの確認が必要です。社内システム変更であったのか、ビジネスプロセス自体の変更であったのかなど、要因次第で他の項目への影響も考えられるからです。
よくあるケースは3.ですが、これも欠損理由が何かにより欠損対応が変わってくることが考えられます。ここからはデータエンジニアリングの領域なので割愛しますが、その項目だけ対処すればよいのか?欠損したことを証拠として残す新規項目を作った上で欠損値埋めをするかなど欠損している各項目について確認が必要です。
評価指標の精度よりも有識者の納得感を
ビジネスにおけるデータ分析では精度より業務担当者の「納得感」の方が重要と私は考えます。
極端な例を挙げると、欠損のあるレコードを取り除いた結果としてモデル精度が上がったとしても実際のビジネスでは通用しないことが多いでしょう。当然テストデータの精度で発覚するのが望ましいですが用意できるテスト用レコード件数によっては気付かず、暫定運用期間にならないとわからないかもしれません。
欠損値対応一つ一つの確認などは項目が多くなってくると業務担当者も嫌がるかもしませんし、確認を依頼するのも大変です。
しかし、業務担当の方が納得していない分析モデルは使ってくれませんし、使われなくなります。
機械学習モデルはデータから作られることの説明を
AIはブラックボックスだ、説明可能性が低いだのと言われます。データサイエンティストはそういった認識に対し真摯に向き合う必要があります。ただそれは難しいことではないと思います。
データ分析モデルはデータから作られているという一点は揺らぎません。
業務担当者の方に理解できない、納得感のない分析モデルが生まれることはビジネスデータにおいてはないと思ってよいのではないでしょうか?もしそんな事態が発生したらCRISP-DMにあるようにビジネス理解に立ち返りましょう。
欠損値への向き合い方もデータ全体と同様で「納得感のある」分析モデルを作るためと考えると少しは気が楽になりませんか?
おわりに
私自身が取り組んだことのあるデータ分析における欠損理由の最たるものは任意かつ手入力項目でした。
BtoCではなくBtoBの場合はまだまだそんなデータが多いのではないでしょうか。
この記事がこれからデータ分析に関わっていく方の助けになればと思います。