ワークフローのどこで欠落データを処理する必要がありますか?


16

私は(Pythonの使用、私の場合には、機械学習モデルを作成するためのワークフローを構築していますpandasし、sklearn非常に大規模なデータベースから引き出されたデータからパッケージ)(ここでは、にVerticaは、SQLとの方法によりpyodbc)、そのプロセスにおける重要なステップが含ま帰行方不明予測子の値。これは、単一の分析プラットフォームまたは統計プラットフォーム(Python、R、Stataなど)内では簡単ですが、マルチプラットフォームワークフローでこのステップを見つけるのに最適な場所が知りたいです。

sklearn.preprocessing.Imputerクラスで、pandas.DataFrame.fillnaメソッドを使用して、または手動で(使用される代入メソッドの複雑さに応じて)Pythonでこれを行うのは十分簡単です。しかし、私はこれを何億ものレコードの数十または数百の列に使用するので、事前にSQLを介して直接これを行うより効率的な方法があるのだろうかと思います。Verticaのような分散プラットフォームでこれを行う潜在的な効率は別として、これはテーブルの「完全な」バージョンを構築するための自動化されたパイプラインを作成できるという追加の利点があるので、新しいセットを記入する必要はありませんモデルを実行するたびに、ゼロから欠損値を取得します。

私はこれについて多くのガイダンスを見つけることができませんでしたが、私たちはできると思います:

  1. 不完全な列ごとに代替値の表(全体またはグループごとの平均/中央値/モードなど)を作成します
  2. 代替値テーブルを元のテーブルと結合して、各行と不完全な列に代替値を割り当てます
  3. 一連のcaseステートメントを使用して、使用可能な場合は元の値を取得し、それ以外の場合は代替値を取得します

これはVertica / SQLで行うのが合理的なことですか、それともわずらわずPythonで処理するだけの正当な理由がありますか?後者の場合、スケルンではなくパンダでこれを行うための強力なケースがありますか、その逆ですか?ありがとう!

回答:


14

代入などの自動化されたタスクに関する私の強い意見(ただし、ここではスケーリング、センタリング、機能選択なども含めることができます)は、データを慎重に検査せずにそのようなことを一切行わないことです。

もちろん、どのような代入を適用するかを決定した後、自動化できます(新しいデータが同じ形状/問題を持っているという仮定の下で)。

だから、何よりも前に、賢明な決断を下してください。私はしばしばこのことを自動化しようとして時間を無駄にし、データを破壊しました。いくつか例を挙げましょう:-N / Aとしてエンコードされたマーケットプレイスで、見逃して北/アメリカと見なされた--999​​.0のような数字データが欠落しているのではなく、血圧または体温(血圧が0の生きている人間を想像するのは困難です)-データがさまざまなソースから収集されたため、データが欠落している複数のプレースホルダー

その後、特定のタスクのデータからの情報により似ている補完の種類を理解する必要があります。これは多くの場合、見た目よりも適切に行うのがはるかに困難です。

これらすべてのことの後、私のアドバイスは、新しいデータで再現するツールがある上位層への代入タスクを遅らせ、新しいデータの仮定に違反していないかどうかを検査することです(可能な場合)。


1
+1自動化は必ずしも物事を改善するわけではなく、より一貫して、多くの場合より速くなります!
ジェームズ

4

Therriault、Verticaを使用していると聞いて本当に嬉しいです!完全な開示、私はそこで最高のデータ科学者です:)。あなたが説明するワークフローはまさに私が頻繁に遭遇するものであり、pyODBCとpandasが動作する前にデータベース内の非常に大きなデータセットを前処理することを真に信じています。再現可能な作業を確保するために、ファイルベースのクエリを使用してビューまたはテーブルを作成することをお勧めします。幸運を

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.