機械学習のための高品質データセットの作成初心者ガイド

「機械学習初心者のための高品質データセット作成ガイド」

データクリーニング、データの視覚化、データの拡張、および合成データ生成のためのツールと技術

データの複雑さの真のソースを見つけることは、「データ探偵」をするようなものであり、本当に有用な洞察を解き放つ「黄金の鍵」を見つけるまで続けることです。写真:Michael Dziedzic on Unsplash

ビッグデータよりもスマートなデータ。それが「データ主導のAI」の前提です。

データサイエンティストは、データを「単に前処理する」だけでなく、データセットを理解し、改善するための継続的かつ体系的なプラクティスを構築するべきです。

それによって、私たちの焦点は問題に対して複雑なアルゴリズムだけを追い求めて分類結果を高めることから、なぜ分類結果がそのようになるのか、問題の複雑さの真のソースは何か、どのようにデータを調整して分類器が問題をより良く学習できるようにするかという、深い理解に移行することで、パフォーマンスを向上させることになります。

機械学習が初めての場合、これは少し困難に思えるかもしれません。「高品質なデータセットを構築するためのベストプラクティスは何であり、それをどのように実践すればよいのか?」

このチュートリアルでは、データ主導のAIパラダイムを活用して高品質なデータを作成し、機械学習分類の結果を改善するための簡単なケースを紹介します。

Data-Centric AIのモットーに従って、モデル自体には触れません(正直に言うと、シンプルな決定木になります)。

私たちは、Kaggleで自由に利用できるPima Indians Diabetes Datasetを使用します(ライセンス:CC0:パブリックドメイン)。すべてのコードと追加資料はData-Centric AI Community GitHubで入手できます。

では、始めましょうか?

ステップ1:データ理解のためのデータプロファイリングの実行

データセットを整理する前に、解決しようとしている問題と、作業しているデータの特異性を理解する必要があります。データの特徴、問題の複雑さ、およびユースケースの領域を徹底的に理解することは、データ主導のAIの最初の原則の一つです。

これにより、機械学習パイプラインで次のステップを決定するのに役立ちます。

データプロファイリングには、いくつかの興味深いオープンソースのツールがあります。自分自身がいくつかを評価したレビューを行いましたが、その中にはydata-profilingdataprepsweetvizautovizluxなどがあります。

私は主にydata-profilingを使用しています。データプラクティショナーにとって、このツールは、データの特性や視覚化を最大限に活用するためにpandasを使用する必要がなく、わずか数行のコードですべてを行うことができる、一流のツールだと思います。

まず、ydata-profilingをインストールする必要があります(これには仮想環境を使用することをお勧めします。仮想環境の使用方法がわからない場合は、この2分のビデオをチェックするか、以前conda環境で作業したことがない場合は、この完全なチュートリアルを参照してください):

そして、必要な特性とビジュアライゼーションの .html レポートを保存することで、データの完全な概要を得ることができます:

データレポートによって、データの全体的な特性や注意すべきいくつかの警告をすぐに把握することができます。

YDataプロファイリングレポート:データセットの基本統計、ビジュアライゼーション、品質警告を見つける。

データセットは768の観測と9つの変数/特性を含んでいます。そのうち8つが数値で、1つがカテゴリ型(Outcomeがターゲットのようです)。重複した行はありませんし、明らかに欠損値もありません。最後に、特性間でいくつかの高い相関の警告が見つかりました。さらに、いくつかの特性にはゼロの値が多く存在します。

さあ、データ探偵を始めましょう。 高い相関は生物学的特性では予想されるものですが、これらのゼロの値はどうでしょうか?

ハイライトされた特性(例:BMI)を見ると、これらの値が全体的な分布からかなり外れていることがわかります。また、ドメイン知識に頼ると、これらの「0」の値は実際には意味がありません。つまり、Pregnanciesでは0の値はOKですが、BMI、Glucose、Insulin、Blood Pressure、またはSkin Thicknessでは無効です。

YDataプロファイリングレポート:BMI特性で、ゼロの値が分布から「外れている」ことを示しています。

これらのゼロがエンコードしているのはすぐに分かります:欠損データです。

今のところ、この問題を修正する方法に取り組みますが、徹底的な探索的データ分析(EDA)のプロセスではさらに多くのことがわかります。データから何を発見できるかを知るために、この探索的データ分析のための基本ガイドをチェックしてみてください。

ステップ2:データ品質の問題を調査する

いくつかの列に無効なゼロ値があることが分かったので、まずはデータセットの欠損データの問題を処理することから始めましょう。

多くの機械学習モデルやscikit-learnの推定器は、ネイティブで欠損値をサポートしていませんので、エスティメーターにデータセットを供給する前にこれらのNaNをどう処理するかを考える必要があります。

まず、これらの0値をNaN値としてマークしましょう:

次に、データ補完を使用してNaNの観測値を妥当な代替値で置換することができます。

「ただし、無料の昼食はない」という定理は、すべての状況に最適な解決策はないということを示しています。私たちは異なる解決策がトレーニングデータの複雑さにどのように影響するかを調査し、機械学習モデルを最適化する方法を判断する必要があります。それがデータ中心のAIの別の原則です:常に反復と改善を行うこと。

今のところ、非常にシンプルな方法である SimpleImputer を使用して、ゼロ値を各特性の平均値で置換してみます。これは非常に素朴なアプローチであり、分布にいくつかの望ましくない「スパイク」を生み出す可能性がありますが、単に欠損データを強調し、置換する方法を示すためのものです。後でより良いアプローチを試すことができます:

次に、非常にシンプルな決定木分類器を使って、分類の結果のベースラインを見てみましょう。ちなみに、決定木は欠損値を自然にサポートすることができ、代替分割などの方法を通じて拡張することができます。実際、現在のバージョン(1.3.2)では、scikit-learnのドキュメントによると、決定木はいくつかの条件下で欠損値に対して組み込みのサポートを持っているようです。ただし、私はバージョン1.2.2を使用していたため、次のエラーに遭遇しました:

それでも、NaNの値が内部で処理されていても、欠損データでモデルをトレーニングすることは良い慣行ではありません。なぜなら、それは乱雑で限られた情報からモデルが学ぶ概念を危険にさらすからです。

ここに混同行列があります:

分類結果はあまり良くありません。単純な決定木を使用していることを忘れないでくださいが、それでも…ターゲットのカテゴリに対する予測の間には著しい違いがあります。なぜ分類器はクラス「0」に対してクラス「1」よりも優れたパフォーマンスを発揮しているのでしょうか?

ステップ3:未代表クラスの強化

もしステップ1で注意を払っていたなら(もしかしたらすでに気づいているかもしれませんが)、私たちのターゲットクラスであるOutcomeは不均衡です。おそらくデフォルト設定で警告を発生させるほどではありません(デフォルトのしきい値0.5です)、しかし少数派のクラスを無視して多数派のクラスにバイアスをかける可能性があります。これはプロファイリングレポートで示されているデータの可視化から明らかです:

YData プロファイリングレポート:Outcomeのクラス「0」とクラス「1」は均等に表されていません。クラシファイアは自然に、クラス「0」に対してクラス「1」を無視しやすくバイアスがかかります。

欠損データはデータ収集、伝送、または保管中のいくつかのエラーによって引き起こされる可能性がありますが、クラスの不均衡はドメインの自然な特徴を反映している可能性があります:例えば、この医療センターでは単に糖尿病の診断を受けた患者が少ないだけです。

それにもかかわらず、モデルが少数派のケースを見落とさないようにするためにトレーニングデータに対してアクションを起こすことは依然として重要です:実際には、より正確な予測をしようとしているのです。

偽陽性は悪い結果をもたらします。健康な患者に対して誤った情報を提供するからです。しかし追加の検査が行われると、これは単なる「警告」となります。

ただし、この場合、偽陰性はより悪いです。糖尿病のある患者に対して何も問題がないと伝え、彼女の診断が見落とされ、病気が進行します。

これらの数字を増やす方法の1つは、データオーバーサンプリング技術を使用することです。データオーバーサンプリングは、データの分布(つまり、データ内の既存のクラスまたはカテゴリの比率)を調整するためにデータプラクティショナーの間で人気のある技術であり、不均衡データの問題を軽減します。

そして、それは合成データの多くの興味深く有用な応用のひとつです。

合成データにはいくつかの解釈ができますが、ここでは「偽データ」、「ダミーデータ」、「シミュレートされたデータ」という意味です。ここでは「データ駆動型」の合成データ生成を指しています。

その意味では、合成データは実際のデータの特徴(構造、統計的な特性、依存関係、相関など)を保持して人工的に生成されます。

合成データを生成するための方法やオープンソースツールはたくさんあります — ydata-syntheticsdvgretel-syntheticsnbsynthetic、そして過去に試したいくつかのツール。synthcity

そして再び…「無料の昼食」はありません:最適な方法を選ぶことは、合成データが必要な目的によって必ず依存します。

合成データの使用方法を簡単に把握するために、ydata-syntheticパッケージを活用し、彼らのガウス混合モデルを試してみましょう。

まず、パッケージをインストールする必要があります:

そして、それが完了したら、合成データの作成は非常に簡単です:

合成データができたら、合成データからサンプリングして生成された少数クラスのサンプルの新しく生成されたサブセットを取り出して、トレーニングデータに追加して、バランスの取れた(つまり、50% -50%)分布を作成できます:

それが私たちの決定木の学習とそれに続く結果にどのような影響を与えるか見てみましょう:

そして混同行列:

私たちのトレーニングセットのこのような単純な修正が、Fスコアのパフォーマンスを10%向上させ、少数クラスの感度結果を大幅に改善したことに注意してください(53%から73%へ)。

ここにデータ指向AIの美しさがあります:モデルのパラメータ設定を一切触れずに、非常にシンプルなヒューリスティックスと標準的な手法でトレーニングセットの品質を大幅に改善しました。−さらに高度な戦略や特化したデータ準備パイプラインを備えることができると想像してください!

もちろん、クラス0の再現性が若干損なわれましたが、結局のところ、私たちはこのモデルを特異よりも感度が高くする必要があります(つまり、陽性クラスを陰性クラスよりもよりよく検出する)−疾患の診断のような特定の制約に対処しているため−データ指向AIの別の原則:メソッドと結果は、ドメインのニーズと制約に基づいて評価する必要があります。

最終的な考えと今後の方向性

この記事では、非常に実践的なユースケースでデータ指向AIパラダイムを実験しました。

いつも通り、まずはデータを理解することから始めました。欠落しているデータなどの特定のデータ品質の問題を調査・解決し、合成データを使用してトレーニングデータの不均衡な性質を克服するためにトレーニングデータを改善しました。勿論、このような素早く簡単なケーススタディでは、仕事を完了させるためのシンプルなヒューリスティックスに焦点を当てましたが、データサイエンティストの仕事は決してそこで終わりません。

別の補完方法を考慮した場合、結果はどのように変わるでしょうか?合成データの生成でより良い適合を実現するためにはどのようにすればよいでしょうか?両方のクラスを均等にバランスさせるべきだったのか、または少数クラスの表現をさらに高めるべきだったのか? 特徴量の変換や次元削減が分類結果の改善に役立ったでしょうか? いくつかの交絡要素を削除するべきだったのか?

これらのすべての質問は、機械学習プロジェクトの開始時にはわからないように思えます。しかし、各データセットの複雑さの源泉を測定し、洞察を得るにつれて、分類結果を改善するための方法がわかってきます(一種の “メタ学習”アプローチ)。そして、データはデータの特性とプロジェクトの究極の目標に応じて操作や改善する必要があります。

事前定義のパイプラインを作成し、データの準備を一括して解決する方法は、盲目的に進むことに似ています。その代わりに、熟練したデータサイエンティストは常にデータ探偵を演じ、データが我々が捉えるために残した手掛かりに基づいて最良の手法を見つけようとします。そして、それは通常そうです。私たちの目を鋭く保つ必要があるだけです!

このチュートリアルがお楽しみいただけたことを願っています。フィードバック、質問、提案はいつでも大歓迎です。コメントで書いてほしい他のトピックについても教えてください!

データサイエンスを始めませんか?次の木曜日、2023年11月23日に私たちに会いに来てください!

まだデータ指向AIコミュニティの一員でないなら、ぜひ参加してください。私たちはデータに関する情熱を共有するフレンドリーなデータ愛好家のグループです。時折、超面白いCode with Meセッションを開催しているし、スーパーインフォーマルなスタディグループも始めています。

私は次回のセッションを2023年11月23日に開催します探索的データ分析のコンセプトを紹介します。

また会えるの?

私について

博士号を取得した機械学習研究者、教育者、データの推進者、そしてなんでも屋。VoAGIで、データ中心のAIとデータ品質について書いています。データサイエンスと機械学習コミュニティに、不完全なデータから知能あるデータへと進む方法を教えています。

YDataの開発者関係 | データ中心のAIコミュニティ | GitHub | Google Scholar | LinkedIn

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more