AIで売上や顧客の傾向を分析する前に、空欄を埋めるべきか、似た名前をまとめてよいか、同じ行を削除してよいかで迷うことがあります。判断の出発点は、見た目をそろえることよりも「その値が業務で何を意味するか」を確認することです。
本稿ではデータクレンジングを、分析に使うデータの欠損・表記揺れ・重複などを確認し、利用目的に合う形へ整える作業として扱います。企業のAI活用担当者向けに、処理するもの、残すもの、確認まで保留するものの分け方を示します。
最初に「何を1件と数えるか」を決める
例えば注文データなら、1行が注文全体なのか、注文内の商品明細なのかを確認します。同じ注文IDが複数行に現れていても、別々の商品明細なら、それだけで重複とは判断できません。
以下の判断表と手順は、業務担当者と分析担当者が処理条件を合意するための編集上の提案です。特定企業の実績や、すべてのデータに適用する規則ではありません。
| 問題 | 最初に確認する意味 | 処理の候補 | 保留する条件 |
|---|---|---|---|
| 金額や属性の欠損 | 未入力・未確定・対象外のどれか | 元データの訂正、欠損のまま保持、条件付き補完・除外 | 空欄とゼロの違いが不明 |
| 名称の表記揺れ | 表現だけの違いか、別の対象か | 承認済み対応表で統一、照合用の別列を作成 | 名称は似ているが同一性を確認できない |
| 注文・顧客の重複 | 同じ取引か、再購入か、更新履歴か | 識別キーで照合し、合意した版を採用 | 比較キーや残す版が未定 |
| 不自然な値 | 入力ミスか、実際に起きた値か | 原票との照合、修正、確認対象として分離 | 大きい・小さいという理由しかない |
意味が不明な値は、処理しやすい値に置き換える前に確認対象へ分けます。担当者が判断できるまで元の値と理由を残す運用を勧めます。
欠損は、ゼロ・不明・対象外を分けて扱う
pandasの公式資料には、欠損を含む行や列を削除する機能と、欠損を別の値で置き換える機能があります。ただし、機能を選べることと、その処理が業務に適切であることは別の判断です。pandasの欠損データ処理
架空の注文表で、金額が「0」の行と空欄の行があるとします。0が無償提供、空欄が金額未確定なら、空欄を0で埋めると二つの状態を区別できなくなります。この場合は「金額未確定」という状態を残し、確定済み売上の集計対象に含めるかを業務側で決める案が考えられます。
欠損を処理するときは、次の順で確認します。
- 元システムや原票に値があり、正しい値へ戻せるか。
- 値がない理由を区分できるか。
- 分析対象から除くなら、どの店舗・期間・顧客層が除かれるか。
- 補完するなら、補完方法と補完した行を記録できるか。
平均値や中央値で埋める案も、値を推定したという前提を明示して検討します。観測した元の値と同じ扱いで保存せず、補完フラグや元列を残し、分析担当者が区別できるようにすることを勧めます。
表記揺れは「文字の統一」と「同じ対象の判定」を分ける
半角・全角などの文字表現を扱う仕組みにUnicode正規化があります。Unicodeの仕様は、互換正規化によって意味上重要な区別まで失う可能性があるため、任意の文字列へ無条件に適用しないよう注意しています。Unicode UAX #15の正規化形式
業務データでは、項目ごとに変換の範囲を決める運用が考えられます。検索用の名称は幅や前後の空白をそろえる候補にしても、商品コードや正式表記まで一括で変更してよいとは限りません。原文を残し、照合用の列へ変換結果を持たせると、変更内容を確認できます。
また、名称が似ていることと、同じ取引先であることは分けて判断します。例えば「青空商事」と「青空商事 東京支店」をまとめるかは、法人単位の分析か支店単位の分析かで決める必要があります。これは架空の例です。
対応表には「変換前」「変換後」「対象項目」「根拠」「確認者」を残す案を勧めます。AIを表記揺れ候補の抽出に使う場合も、同一対象と確認できない組み合わせは自動統合の対象から外す設計にします。
重複は、比較するキーと残す行をセットで決める
pandasの重複削除では、判定に使う列と、先頭・末尾のどちらを残すかなどを指定できます。末尾を残す設定だけでは、業務上の最新版を定義したことにはなりません。pandasのdrop_duplicates仕様
注文データなら、次のように違いを整理します。いずれも説明用の例です。
| 見つかった状態 | 判断すること | 対応案 |
|---|---|---|
| 同じファイルを二度取り込んだ | 同一の元レコードか | 取込元と識別キーを照合し、二重取込分を除外 |
| 同じ顧客が同額を二度購入した | 別の注文か | 注文IDが異なる正当な取引なら保持 |
| 同じ注文の金額が更新された | 訂正履歴か、別明細か | 訂正の扱いを決めて採用版を選ぶ |
更新日時で選ぶ場合も、日時の意味と、同時刻の版がある場合の扱いを決めます。判断できないものを任意の並び順で残さず、確認対象に分けてください。
処理前後は、件数だけでなく集計結果も比べる
実務では、元データの保存、処理条件の記録、少量での試行、結果確認、対象全体への適用という順で進める案を勧めます。元の記録を上書きせず、どの条件で何を変えたかを説明できる状態を目指します。
| 確認対象 | 比べる内容 |
|---|---|
| 件数 | 入力、保持、除外、保留の件数と理由 |
| 欠損 | 項目別の欠損数、補完数、未解決数 |
| 名称 | 統一前後の対応、誤って同一視した値がないか |
| 重複 | 比較キー、採用版、除外した元レコード |
| 分析への影響 | 売上合計や店舗別件数など、利用する指標の前後差 |
例えば、説明用に100行の入力から二重取込を5行除き、金額不明の3行を別管理するなら、分析対象92行・除外5行・保留3行として元の100行と照合できます。この例では三つの区分は重ならない前提です。補完や表記変換は行を減らさない処理なので、別に変更件数を記録します。
業務担当者には値の意味と保留の解消を、分析担当者には処理の再現と前後比較を依頼する分担が考えられます。データを加工して継続的に届ける役割は、データエンジニアの仕事内容でも説明しています。
AIモデルを学習する場合は、補完値の求め方にも注意する
ここまでの業務上の確認に加え、予測モデルを学習・評価する場合はデータの分け方も確認します。scikit-learnの公式資料は、学習用とテスト用を分け、前処理で学ぶ値を学習用データだけから求めるよう説明しています。テスト情報が混ざると、性能評価が過度に良く見える原因になります。欠損補完も対象です。scikit-learnのデータ漏洩に関する注意
例えば平均値で補完するなら、全データから平均を計算してから分割するのではなく、学習用データで求めた補完値をテスト用にも適用します。この注意はモデルの学習・評価に関するもので、集計表を作る作業とは適用場面を分けて考えてください。
AI分析へ渡す前には、欠損をどう扱ったか、名称を何に基づいて統一したか、重複のどの版を残したかを確認できる処理ルール表を用意しましょう。未解決の値も件数と理由を添え、分析の利用者が対象範囲を判断できる状態にします。