elsur.jpn.org >

« 覚え書き: Rのdplyrパッケージのhogehoge_{all, if, at} 動詞の使い方 | メイン | 読了:中田(2018) 機械学習のクラウドサービス in 2018 »

2018年5月 5日 (土)

Qi, Z., Wang, H., Li, J., Gao, H. (2018) Impacts of Dirty Data: an Experimental Evaluation. arXiv:1803.06071 [cs.DB]
 たまたま見つけて、面白そうなのでめくってみたもの。著者らの所属はハルビン工科大。
 タイトルの通り、データが汚れていたら機械学習の結果にどう響くか、という実証研究である。面白いことを考えるなあ。実験結果をどこまで一般化していいものかどうかわからないが、テーマとしてはなかなか切実な話である。

 データの品質として次の3つに注目する。

 アルゴリズムとして以下に注目。

 実験です。UCIデータセットから、irisなど13個のデータセットを借りてきて、わざと汚してはアルゴリズムを適用し、汚さない場合と比較した。
 手順の説明ののち、5頁にわたって結果の報告があったが、めんどくさいのでパス。すいません、そこまでの気力はないんです...

 最後に示された、ユーザ向けガイドラインだけメモしておく。
 分類の場合のガイドライン。なお、F指標ってのは(2 x Precision x Recall) / (Precision + Recall)のこと。

  1. まずは所与のデータのエラー率(欠損率、不整合率、矛盾率)を求めましょう。
  2. アルゴリズムを選びましょう。まずprecision, recall, F指標のどれに注目するかを決める。それが70%を超えるアルゴリズムを候補とする。データが小さい場合は、ロジスティック回帰も候補にいれる。
  3. 一番エラー率が高いタイプのエラーに注目し、上で決めた指標について、sensitivityが一番低いアルゴリズムを選ぶ。[sensitivityとは、データが汚れているときにそれに影響される度合いのことで、実験結果が表になっている。実際のところ、どのエラータイプでもどの指標でも、KNNが最低みたいだ]
  4. そのアルゴリズムのkeeping pointを調べ、それに達するまでデータをクリーニングする。[keeping pointとは許容できるエラー率のことで、実験から求めた結果が表になっている。表をみると、注目する指標がF指標の場合、欠損のkeeping pointが一番高いのは決定木だが、不整合のkeeping pontが一番高いのはベイジアン・ネットワーク。ランダム・フォレストはrecallに対する欠損のkeeping pointがやたらに高いが、F指標に対する欠損のkeeping pointはやたらに低い。などなど、いろいろ眺めているといろいろ面白い]

 クラスタリングの場合も上とほぼ同じで、

  1. 所与のデータのエラー率(欠損率、不整合率、矛盾率)を求める。
  2. precision, recall, F指標のどれに注目するかを決め、それが70%を超えるアルゴリズムを候補とする。データが大きい場合はDBSCANも候補にいれる。
  3. 一番エラー率が高いタイプのエラーに注目し、上で決めた指標について、sensitivityが一番低いアルゴリズムを選ぶ。[全体にLVQが低めだ]
  4. そのアルゴリズムのkeeping pointを調べ、それに達するまでデータをクリーニングする。[LVQ, DBSCANが高め。CLARANSは欠損のkeeping pointがめっちゃ低い。へー]

 回帰の場合のガイドライン。なお、NRMSDってのはRMSDを(予測値の最大値)-(最小値)で割ったもの、CVRMSDってのはRMSDを予測値の平均値で割ったもの。

  1. 所与のデータのエラー率(欠損率、不整合率、矛盾率)を求める。
  2. RMSD, NRMSD, CVRMSDのどれに注目するかを決め、それが1(NRMSDなら0.5)%を超えるアルゴリズムを候補とする。
  3. 一番エラー率が高いタイプのエラーに注目し、上で決めた指標について、sensitivityが一番低いアルゴリズムを選ぶ。[全体に最小二乗法が低めだわ...]
  4. そのアルゴリズムのkeeping pointを調べ、それに達するまでデータをクリーニングする。[最小二乗法が高めだ... これが伝統の強さというものか...]

 最後に、今後の課題。
 データ分析・データマイニング関係者のみなさん向けには、

 データ品質・クリーニング関係者のみなさんにはこういいたい。アルゴリズムがエラーに対して持つ頑健性は、エラーのタイプによってもアルゴリズムによっても異なる。だから、いきなりデータを100%クリーンにする必要はないわけだ。むしろ分析課題が決まってから、それにとって適切なkeeping pointまでクリーニングするのがお勧め。

 というわけで、あんまり真面目に読んでないけど、面白い論文であった。
 自分の仕事に引き付けて考えると、私の仕事上のデータ分析はほぼすべてがアドホックなもので、初期の段階では分析課題さえきちんと定義できていないことが多い。分析の進行とともに課題が徐々に明確になり、複数の下位課題にブレイクダウンされていくが、その下位課題によってアルゴリズムも使う変数も変わってくるし、クリーニングが必要な程度も変わってくる。そのせいで、初期段階で時間をかけたクリーニングが結果的には不要であったり、逆にあとでクリーニングをやり直す必要に迫られることも少なくない。どうやって改善すればいいのか、悩ましいところである。
 この論文のアプローチは、「目的とする指標とアルゴリズムによって、クリーニングの目標水準を決める」というもので、分析課題がはっきりしている状況では有用だと思う。でも私の場合、データを一通りクリーニングしないことには身動きが取れないが、しかしクリーニングしてる段階ではまだ先が読めないんですよね...クリーニングをいくつかのフェイズに分け、本格的なクリーニングは個別のモデリングごとにオンデマンドにやるものなのだと覚悟を決める、というのがよいのだろうか。ううむ...

論文:データ解析(2018-) - 読了:Qi, Wang, Li, & Gao (2018) 機械学習におけるデータの「汚れ」の影響

rebuilt: 2020年11月16日 22:54
validate this page