2022/01/11

ただのその場しのぎ?データセントリックの視点から欠損データを紐解く。

-欠損値処理の前に知ってほしい考え方を、データセントリックの視点からご紹介-

ただのその場しのぎ?データセントリックの視点から欠損データを紐解く。_サムネイル

これからはデータセントリックにシフト?

欠損値の話かと思ったら、いきなり聞きなじみのない言葉が・・・と思ったみなさん、申し訳ありません。しかし、欠損データについて再考するにあたり、かなりヒントになる考え方だと思うので、あえて一番最初に挙げています。

AI活用におけるデータセントリック(Data-centric)とは「データ中心」のアプローチのことを指し、「モデル中心(Model-centric)」であったこれまでのデータ分析プロセスに対して用いられます。

そして、データセントリックな考え方の方が、実際に予測精度が向上につながりやすいといった結果も図のように示されています。

MLOps: From Modelcentric to Datacentric AI, Andrew Ngより引用

(引用)MLOps: From Modelcentric to Datacentric AI, Andrew Ng, https://www.deeplearning.ai/wp-content/uploads/2021/06/MLOps-From-Model-centric-to-Data-centric-AI.pdf

Data × Model = Predict という関係性が成り立つ中で、多くの機械学習の教科書においては、基本的には整ったデータがあり、そこからモデルの詳しい話が展開されます。これにより、データ固定でモデルを改良していくことで精度を向上させようというModel-centicな考え方がセオリーとなりました。(kaggleというコンペはこれを体現していますね。)

これに対し、これからはモデル固定でデータの質を改善していくことで、予測精度を向上させようというのが、データセントリックの考え方になります。

ただし、これはもちろん方向性・意識の話で、AIモデルはどうでもよいとか、データが全てという極端な話ではないです。モデルを試行錯誤して改良するということは今後も必ず重要なプロセスになると思います。重要なことは、データの質にもっとこだわろう。今あるデータだけでなく、未来のデータを意識しようという考え方になります。

こうしたデータセントリックの考え方をもとに、本コラムでは欠損値処理の重要性について今一度考えたいと思います。

なお、この補完手法が最近話題らしい!というような内容ではなく、どちらかというと、数ある補完手法についていろいろ調べる前に知っておいてほしい内容をお伝えする形になっていますので、ご了承ください。

Data x Model(Code) = Predict という関係性が成り立つ以上、DataもModelも両方重要であるという前提のもと、Dataによりフォーカスしようという概念を図で表現しました。予測において、**DataとModelのどちらが重要かを示しているわけではありません。**

(注) Data x Model(Code) = Predict という関係性が成り立つ以上、DataもModelも両方重要であるという前提のもと、Dataによりフォーカスしようという概念を図で表現しました。予測において、上図によって、DataとModelのどちらが重要かを示しているわけではありません。

データの質を向上させるには?

データセントリックとは言いますが、どうしたらデータの質を向上させられるでしょうか?これを考えるために、逆に質が悪いデータとはどんなデータか考えてみましょう。皆さんどんなデータが思い浮かびますか?

「欠損値」とタイトルにあるので、このコラムを読んでくださっている方は、もう欠損値のことで頭がいっぱいで、欠損値の多いデータが思い浮かんでいる事でしょう(笑)。

他には、自分の経験として頻繁に話題にあがるのは、アノテーションの質が悪いデータがあるかと思います。(他にも、あらゆる角度からたくさんの意見があると思います。)

今回は、この二つを比べてみます。近年、アノテーションの質や速度をあげようという取り組みは、世間的にも非常に盛んになってきていると思います。アノテーションの外注サービスが重宝されていることからもこのことが分かります。

それにくらべて欠損値の処理はどうでしょうか・・・。結構その場しのぎにになっていたり、いつも納得行くところまでできなかったなという方も多いのではないのでしょうか?

欠損値の処理は、モデルに入力する(学習に用いる)データ自体に関わるわけですから、データの質を向上させようというデータセントリックの考え方においては、その重要度も高いはずです。

Untitled

経験上感じる欠損値に関する考察がおろそかにされがちな理由

データセントリックとまではいかずとも、データが重要であるということはこれまでも認識されていたと思います。

しかし現実問題として、欠損値の処理は、他の分析工程に比べればですが、おろそかにされていると思っています。より正確に言うと、欠損値の処理というよりも欠損値に関する考察が不十分な場合が多いように思います。

欠損値に全く対処していないわけではないけど、ただのその場しのぎや応急処置になってしまっているというような感覚です。

まずは、自分なりに欠損値に関する考察がおろそかにされがちな理由を考え、

  1. 難しい割に効果が実感できないから
  2. 欠損値を無視して、そのまま扱える手法があるから
  3. あまり時間がないから

の3つにまとめてみました。

一つ一つ説明していきます。

1. 難しい割に効果を実感しにくい。

上述したアノテーションの質が向上すると、目に見えた精度向上が見込めるので、効果が実感しやすいです。アノテーションは大変な作業ではありますが、「病気の重症度がどれくらいか」ということや「これがカテゴリAかカテゴリBか」ということには一応正解があり、後付けで修正処理できる場合が多いです。そのため、専門家などの見る人がみれば、間違いを正してより正確で質の高いデータに改善できる可能性は非常に高いです。

こうした例と比較してみても、欠損値の処理は、分析プロセスの中でも特に難しい部類だと思います。なぜなら、本来だったらどの値が来るべきだったかという正解が、一般的にはどう頑張っても後からは分からないからです。(対象者それぞれに直接問い合わせるなど、例外もあるかとは思いますが、コストなどの面から現実的ではないので今回は考えません。)

もし、超高精度とされる欠損値補完手法を適用したとしても、結局正解のデータが得られたのかは、欠損していた以上確認できません(= うまくいったという実感が得られにくい)。もちろん、何らかの欠損値の処理を施した結果、最終的に予測精度が向上したということは考えられるのですが、アノテーションなどと比べると、直接的に精度向上に貢献したかどうかというのは、分かりにくいです。

2. 欠損値を無視して、そのまま扱える手法があるから

最近では、機械学習モデルにおいて、欠損値を特に意識せず分析を実行できるものが増えてきており、そうした今ある情報をできる限り活用することのできるモデルが人気です。

リストワイズ削除のように、有用なデータまで削除するでもなく、正しい確証のないデータを代入するでもなく、今ある情報を最大限活用するという方法は、非常に理にかなっていて有力であると私も思います。

しかし、データの質自体を向上させるという点においてだけは、デメリットがあると思います。それは、データに欠損が生じてしまっているという事実まで無視する事につながってしまうことです。

今この瞬間の分析においては、欠損を意識しない(欠損が存在するという情報をそのまま使う)ことは確かに最善策かもしれません。とはいえ、欠損が発生しないことの方がより理想的です。長期的に見れば、この欠損はどういった背景・メカニズムに基づいて発生していそうか?ということを考察して、今後のデータ収集に活かすべきです。

欠損値を意識せずに分析できる手法があるからと言って、欠損データに関する考察をおろそかにしていいわけではないです。

3. あまり時間がないから

「1. 難しい割に効果を実感しにくい」という点にも関連して、必要最低限以上の欠損値に関する考察は、どうしても優先順位が低くなってしまいがちです。分析プロジェクトにも定められた期間があり、その中で多くの時間をさいているのは、特徴量や分析モデルに関する試行錯誤でしょう。このことには、「モデル中心」の現在のデータ分析の思想がよく現れていますね。

欠損値について考察するための具体的なヒント2つ

欠損値の扱いが中途半端になってしまっている理由を上述しました。そのうえで、ここでは、欠損値について考察するための具体的なヒントを2つご紹介します。

1. 欠損値にも種類がある!に関しては、ご存じの方も多いかもしれませんが、特に考えず削除している・平均値を代入しているという方にはぜひ知っていただきたい内容です。

2. 感度分析を実施しよう!に関しては、多くの方が知らないのでは?と思います。欠損値にまつわる感度分析は、臨床研究などの分野でよく議論されていますが、まだまだ一般的ではないので、是非のぞいていってください。欠損値処理の効果を確認する手助けになるはずです。

1. 欠損値にも種類がある!

多くのデータ分析事例に触れてきた所感としては、まず、多くの方がどの変数に何%欠損があるか調べ、「この変数は使えそうだな。/ちょっと使えないな」ということの判断はしていると思います。その後、欠損行を除去したり、代入を行ったりします。

果たして考えるべきは欠損の割合だけでしょうか?

実は、欠損値にも種類があります。より厳密には、欠損が発生した「メカニズム」によって以下のように分類されます。欠損率が同じだとしても、欠損の仕方は異なるかもしれないということですね。

具体的には、欠損メカニズムは、MCAR、MAR、MNARの3つに分類されます。

下の図はそれぞれのメカニズムを表した図であり、

  • 「Y」 はメカニズムを判断する対象の欠損値のある変数
  • 「X」 はY以外に観測されたその他の変数
  • 「R」 はYにおける欠損値の有無を二値変数で表した変数

をそれぞれ表し、各変数間を結ぶ線が依存関係を示します。

欠損データ分析 (missing data analysis)-完全情報最尤推定法と多重代入法, 村山(2011) https://koumurayama.com/koujapanese/missing_data.pdfより引用

(引用)欠損データ分析 (missing data analysis)-完全情報最尤推定法と多重代入法, 村山(2011) https://koumurayama.com/koujapanese/missing_data.pdf

◯ MCAR (Missing Completely At Random)

MCARは、完全にランダムに欠損している場合を指します。これは、RがXにもYにも依存していない状態です。

欠損メカニズムがMCARの場合は、無視可能な欠損であるとされ、欠損のある行を無視(除外)して分析しても推定結果は不偏であるとされます。

ただし、欠損が完全にランダムに発生しているという状況は稀であると考えられます。

◯ MAR (Missing At Random)

MARは、欠損するかどうかRが、他の観測している変数Xにのみ依存している場合の欠損メカニズムを指します。

女性のほうが、ある項目(体重や年齢)に未回答が多い。というような状況です。

欠損メカニズムがMARの場合は、欠測を除去する分析は偏っている場合がありますが、その他の観測データを用いた代入法によって、偏りを是正することができるとされています。

◯ MNAR (Missing Not At Random)

MNARは、欠測するかどうかRが、(他の観測している変数Xと)、その変数Y自体に依存しており、他の観測データを用いたとしても、欠損するかどうかが欠損値を持つ変数自身と関係を持つ状態を崩せない場合を示す。

体重が高い人のほうが、体重を答えない。かつ、他の変数によって体重の欠測確率を説明できないというような状況です。

欠損メカニズムがMNARの場合、必ずしも代入法によって、欠損データ解析による偏りを是正できるとは限らず、非常に強い仮定をおいた欠損データ解析が必要になるとされています。

-----

以上が、欠損メカニズム3種類の説明になります。

実は、「この欠損値処理の方法は、この状況に適している/適していない」といった判断は、理論的には上述の欠損メカニズムがどれか?という仮定によって成り立っています。(ご興味を持っていただいた方、より詳細な理論については参考文献をご参照ください。)

欠損値に対する認識を「文字通り欠損しているデータのことだよね。」で終わらせるのではなく、欠損値にも種類があるということ視点を持つことは、適切な欠損値の処理において非常に重要です。

女性のほうが明らかに欠損率が高いデータを、男性含めた全体の平均で補完したらバイアスが生じてしまいます。しかし、単にある変数の欠損率を見ただけでは、こういった情報は掴めません。

MCARとか言われても・・・という方も、まずは、欠損値について調べるときも、他の変数との関係性に注目する。というところからはじめましょう。(欠損値に限らなければ、変数間の相関関係を調べるといったことをしている方は多いはずです。)

2. 感度分析を実施しよう

記事の前半で、欠損値の処理は、本来どんな値が得られていたかということが確認できないため、難しいということを述べました。正解がわからないので、いざ欠損値の処理を行っても、「これで本当に良いのかな?」という気持ちになります。

実はどうしようもないわけではありません。確かに明確に良い・悪いを決定づける方法は自分の知る限りでも確立されていませんが、自分が行った欠損値の処理で良さそうかということを調査することは可能なのです。そのためにとられる方法が、感度分析(sensitivity analysis)と呼ばれる方法です。

感度分析とは、分析に関する要素を変化させたとき(仮定を変えたとき・分析手法を変えたとき・パラメータをずらしたときなど)に予測結果がどう変化するか確認するための分析です。

感度分析と文字を見ると難しい感じがしますが、まずは「つまりいろいろなパターンを試して有効性を確認しろってことね。」というようなところでよいと思います。

そして、欠損値の処理に関しても、感度分析が有効です。欠損メカニズムの種類について上述しましたが、この欠損メカニズムの仮定をメインの分析(主解析といったりします)と変え、欠損値の処理方法を変えて分析を行うという感度分析もよく行われます。

例えば、どんな感じでやるの?となっていると思いますので、一例あげます。

メインの解析として、前述したような、欠損値を特に補完しなくてもよい、今ある情報をできる限り活用することのできるモデル(仮にモデルAとします)を採用したとします。このとき感度分析として、次のパターンを比較することが考えられます。

  • 欠損値を補完せずにモデルAを適用(メイン解析)
  • 欠損値補完手法αで欠損値を補完したうえでモデルAを適用 (サブ解析1)
  • 欠損値補完手法βで欠損値を補完したうえでモデルAを適用 (サブ解析2)

(もちろん上記は一例で、このほかにも欠損値を補完しないと使えない「モデルB」を新たに用意したり、他の「欠損値補完手法γ」も試すことも場合によっては考えられます。)

これだけ比較すれば、多くの考察ができるはずですし、思っていたのと違った・・・ということも大いにあると思います。少なくとも、一つだけ試すより次につながるのは確かです。

ところで、「自分がより良いと思っているパターンの欠損値処理方法を新たに試したところ、大きく精度が向上した。」という場合、これでめでたしめでたしなのでしょうか。逆に全く結果が変わらなかったら残念なのでしょうか?

データの質という点から考えると、複数の想定で推論結果が変わらない、言い換えるとすこし仮定を変えたからといって、推論結果が多くの手法で変わらないという方が優れたデータである(頑健である)と考えることができます。逆に、結果が手法によって変わるというということは、データとしては信頼性が低いとも考えられます。この場合は、どういうときにどう結果が変わるか考察することが重要となります。(実際には、より良い補完値が得られるようになっている可能性もあり、結果が異なるのが必ずしも悪いと述べている訳ではありません。)

データ分析を生業にしている方々は、試行錯誤の世界で生きていると思いますので、新しく試したことで結果が変わったほうが反射的にヨシッ!となるかもしれません。データセントリックに考えるとこのあたりの考え方も変わってきますね。

複数モデルの精度を比較検証するのと同様に、欠損値の処理も一つ試して終わりではなく、様々な比較・考察を行うことがベストです。

最後に

本記事では、欠損値の処理をより意味のあるものにするための考え方を、最近話題のデータセントリックという考え方を用いながら、説明させていただきました。

伝えたかったこととしては、

  • どんな場合にでも通用する最良の欠損値補完法を探したり、これが一番良さそうと考えた只一つの手法を適用して終わりにしようとするのは良くない。
  • むしろ、欠損データ自体に着目して欠損メカニズムについて考察することや、感度分析という形で複数の方法を試し、結果の変化を考察することのほうが、質の高いデータにつながっていく。(今のデータの改善という意味でも、今後のデータ収集に役立てるという意味でも)

ということです。

今、欠損値について真剣に考えないとどうなるでしょうか?直近の分析タスクがうまくいかないだけでなく、今後データを増やそうと努力しても、5年後10年後に蓋を開けると欠損値が多いままだった・・・なんてことになる可能性は高いです。今回の話には、未来のデータを改善するためのヒントも含まれていると思います。

そして、欠損値の処理に限らず、その場しのぎではなく今後を見据えたデータ活用を目指しましょう。一時の分析だけでなく、運用までを見据えたAI技術を提供するSierのデータサイエンティストという立場として、今後もこういった情報を発信できればなと思います。

参考文献

本コラムは下記の文献を参考に執筆させていただきました。各項目の詳細については下記をご参照ください。

<データセントリックAIについて>

<欠損メカニズム/ 感度分析について>

執筆
AIコンサルティンググループ
田辺 佑太