ユニット 3 / 11

データのクリーニングと前処理: 欠損値、外れ値、型変換

利益:

  • 欠損値の原因 (ランダム、体系的、意味のある) を区別し、適切な戦略を選択し、トレーニングのみから埋め込み値を計算する能力
  • 外れ値を削除する前に検査し、データエラーと真のまれなイベントを区別する機能
  • タイプとフォーマットの不一致を標準に反映しながら、行/空白の数に対する各ステップの影響を監視することでサイレントロスを防止する機能

データ サイエンティストの時間の約 60 ~ 80% はクリーニングに費やされます。業界では、これは冗談半分で「データ ラングリング」 (データ ラングリングまたはデータ クリーニング) と呼ばれています。なぜなら、現実世界のデータは分析の準備が整うことはほとんどないからです。日付は混合形式で、数値はテキストとして保存され、一部のセルは空白で、顧客は同じ表に 2 つの異なるスペルで 3 回表示されます。この単元では、クリーンアップの 3 つの基本的な側面、欠損値、外れ値、型/形式変換について説明します。人工知能は、この作業において非常に高速なアシスタントです。ただし、掃除の選択によって分析が変わるため、何をどのように掃除するかを決めるのはあなたです。

掃除の黄金律: すべての変更は決断である

セルの削除、欠損値を平均で埋める、外れ値をトリミングするなど、これらはいずれも「中立的な」操作ではありません。それぞれがデータを変更し、結果に影響を与えます。したがって、クリーンアップの黄金律は、すべての変更をコードに書き込み、その根拠をメモし、元のデータを決して上書きしないことです。 AI は簡単なクリーンアップ コードを提供しますが、そのコードが何を行うかを理解するのはユーザーの責任です。 「空行を削除」と言ったら、何行なくなったかを確認せずに実行しないでください。

注意: 元の生データは決して変更しないでください。クリーンアップされたバージョンを別のファイル/テーブルに書き込みます。こうすることで、エラーを見つけた場合でも振り出しに戻り、再現性を維持できます。

欠損値: なぜ空なのか、どうすればよいのか

欠損値 (通常、パンダでは NaN (「数値ではない」) として表示されます) は、セルが空の場合です。しかし、ギャップの原因によって解決策が決まります。典型的な状況は 3 つあります。ランダムな欠落: センサーが一瞬動作しませんでした。それを埋めるのが合理的かもしれません。体系的な欠落: フォームフィールドは特定の顧客に対してのみ要求されます。ここでのギャップは実際には情報です。重大な欠落: 「返品日」が空白の場合、顧客は返品しませんでした。このスペースは 0 または「なし」を意味し、埋められていません。

主な戦略:

戦略

いつが適切ですか?

リスク

行の削除

欠落率は非常に低く (<5%)、ランダムです。

データと表現の損失

列を削除する

列の大部分が空です (60% 以上)

情報の損失

平均/中央値フィル

数値、ランダムに欠落

分散が減少し、分布が歪められます。

カテゴリ「不明」

カテゴリ的、系統的欠損

追加のカテゴリを生成します

モデルによる予測

複雑で貴重なコラム

漏洩リスク、複雑さ

重要な点: 代入値はトレーニング データからのみ計算する必要があり、同じ値をテスト データに適用する必要があります。テスト データの平均を含めると、漏れが生じます (ユニット 10)。中央値 (順序データの中央値) は、平均よりも外れ値に対して強いため、多くの場合、平均よりも好まれます。

外れ値: エラーか本物か?

外れ値は、データ エラー (年齢列の 999) または現実ではあるがまれなイベント (顧客の 200 万ドルの注文) の 2 つのうちのいずれかです。この 2 つを混同すると悲惨な結果になります。真の外れ値を削除すると、重要な情報が捨てられてしまうことになります。ミスを放置すると、平均点が下がってしまいます。したがって、外れ値を自動的に削除するのではなく、最初に調べる必要があります。

一般的な検出方法: IQR 法 (四分位範囲。データの 25% と 75% の五分位の差の 1.5 倍を超える値は外れ値とみなされます) および Z スコア (値の平均からの標準偏差の数。通常、3 より大きい場合は外れ値)。 AI はこれらの計算のコードを数秒で作成します。ただし、「削除」と言う前に、それらの値が何であるかを確認してください。

タイプとフォーマットの変換: サイレント エラー ソース

最も頭の痛い問題の 1 つは、データ型の混乱です。 「金額」列がテキストとして保存されている場合は追加できません。このプログラムは、「1,250」ではなく「1,250.50」などのトルコ語形式の数値を誤って読み取ります。日付 (「01/03/2024」日-月、または月-日?)、カテゴリ (「男性」/「男性」/「M」は同じものですか?)、および単位 (TL またはクルシュ?) は、誤った結果を暗黙的に生成します。クリーンアップの大部分は、日付を 1 つの形式に、カテゴリを 1 つの綴りに、数値を 1 つの単位に、これらの不一致を標準に取り込むことです。

ミニケース3個

ケース 1 — 平均的な罠。チームは収入列の 320 個の欠損値を平均値 (48,500 ドル) で埋めました。しかし、欠点は体系的でした。これらは所得を申告したことがない低所得層でした。平均的な満たしがこのグループを人為的に裕福にし、信用モデルが間違っていた。教訓: 記入する前に「なぜ空白なのか」を尋ねてください。

ケース 2 — 削除すべきではない外れ値。小売アナリストは、売上データから 4 件の大量注文 (それぞれ 180 万 TL) を「エラー」であると考えて削除しました。ただし、これらは実際の企業からの注文であり、総売上高の 22% でした。削除後の予測モデルは、機関の需要を完全に逸脱しました。教訓: 外れ値を削除する前に調べてください。

ケース 3 — 日付形式の障害。 CSV では、日付が「2024-03-01」と「01.03.2024」の両方に混在していました。 YZ によって書かれたコードが最初の形式に従って解析された場合、6,400 行が「無効な日付」として NaT となり、分析から黙って除外されました。アナリストは、行数が減少したときに初めてこれに気づきました。教訓: 変換後は必ず行数と空白数を確認してください。

コピー可能な 4 つのテンプレート

1) 欠損値マップ:

パンダDFを飼っています。各列の欠損 (NaN) の数と割合を示すテーブルを生成するコードを作成します。次に、欠落率が 40% を超える列と欠落率が 5% 未満の列を別々にリストします。あなたが提案する戦略ではなく、この診断コードを生成するだけです。私が決定します。

2) 外れ値の検査 (削除ではない):

IQR メソッドを使用して、「金額」列の外れ値を検出する (削除ではない) コードを作成します。外側の行を別の df に配置して、手動で検査できるようにします。また、外れ値の数とその合計に占める割合も出力します。

3) タイプ/フォーマットの標準化:

次の列を標準化するコードを作成します。 - 「日付」: 混合形式 (「2024-03-01」と「01.03.2024」) を使用できます。 それらをすべて日時に変換し、翻訳できないものを数えて報告します(黙って破棄します)。 - 「性別」:「男性」/「男性」/「M」→「M」、「女性」/「女性」/「F」→「K」。 - "amount": トルコ語形式のテキスト ("1.250,50") -> 10 進数。各変換後に影響を受ける行数を出力します。

4) 洗浄前後のチェック:

クリーンアップ ステップの前後で、選択した列の df.shape、欠損数、および要約統計量 (平均、中央値、最小、最大) を比較するコードを作成します。目的: クリーニングによってどのような変化が生じるかを確認するため。

弱いプロンプト / 強いプロンプト

弱いプロンプト:

このデータをクリアしてください。

「明確」というのは曖昧です。 AIには、どの欠落部分を削除すればよいのか、何を埋めればよいのか、どの列をどのように処理すればよいのかがわかりません。その結果、盲目的で元に戻せない変化が生じます。

強力なプロンプト:

あなたの役割: データ クレンジング アシスタント。 df 列: customer_id (int)、registration_date (混合形式のテキスト)、revenue_tl (テキスト、「1,200.00」)、city (テキスト、一貫性のないスペル)。ルール: - 元の DF を変更する。 df_clean という名前のコピーを操作します。-come_tl を数値に変換し、変換できないものをカウントします。-record_date を datetime に変更し、エラーを報告します。-私の承認なしに行を削除しないでください。候補者を個別に表示します。各ステップの後に、df_temiz.shape と不足している番号を出力します。

ここではソースが保護され、すべての変換がカウントされ、削除は人間に任されます。

よくある間違い

  • 「なぜ空いているのか?」と尋ねることなく、隙間を埋めてください。系統的/有意な欠損を平均値で埋めるとデータが歪められます。
  • 外れ値を検査せずに削除します。実際ではあるがまれなイベントを破棄すると、重要な情報が破壊されます。
  • すべてのデータからパディング値を計算します。テストデータを含めると漏洩が発生します。トレーニングから計算するだけです。
  • 変換後の行数/空白数をチェックしません。サイレントに NaT/NaN である行は分析から除外されます。
  • 元のデータを上書きします。リターンと再現性が失われます。
ヒント: 「前後」を比較してクレンジングを実行します。各ステップの後に、重要な列の df.shape、欠損数、および要約統計量を出力します。したがって、1 つのステップで予期せず 6,000 行が破壊されることがすぐにわかります。

要約すると

クレンジングは、データ サイエンスの中で最も時間がかかり、意思決定が必要なフェーズです。変更を加えるたびにデータが変化するため、それぞれの変更は意識的な決定となります。欠損値については、「なぜ空なのか?」と尋ねてください。異常値を削除する前に、異常値を確認してください。タイプとフォーマットを標準に準拠させます。トレーニング データのみから塗りつぶし値を計算し、元のデータを保持し、カウントすることで各ステップの影響を追跡します。 AI はこのビジネスを大きく加速させますが、何を掃除するのか、そしてなぜ掃除するのかは人間が決定します。

アプリケーションタスク

小さなテーブルを作成 (または作成) し、そこに 3 つの問題 (欠損値タプル、外れ値、混合日付形式) を意図的に挿入します。上記のテンプレートを使用して AI に診断コードと標準化コードをリクエストします。各ステップの前後の行と空白の数を比較します。少なくとも 1 つの「沈黙の損失」を見つけて、それにどのように気づいたかを書き留めるようにしてください。

チェックリスト

  • [ ] 元の生データを保持してコピーを作成しましたか?
  • [ ] 欠落している列ごとに「なぜ空白なのか」という質問をしたことがありますか?
  • [ ] 削除する前に外れ値を確認しましたか?
  • [ ] パディング値はトレーニング データのみから計算しましたか?
  • [ ] 各ステップの後に行/空白の数をチェックし、サイレントロスを排除していますか?