
データクレンジング実務テクニック
ボトルネックを見極める品質KPIと運用フロー
クレンジングは「綺麗にする作業」ではなく、意思決定の誤りコストを減らす工程です。最初に「何をもって十分な品質とするか」を数値で合意します。おすすめは次の4指標です。完備性(必須項目の非NULL率)、一意性(自然キーの重複率)、整合性(参照/型/範囲違反率)、鮮度(遅延時間)。例えば、顧客マスタなら「完備性98%以上・重複率0.5%未満・参照不一致0件・鮮度24時間以内」をSLA化します。
品質KPIは単発ではなく、日次で追えるようにします。取り込み→プロファイリング→クレンジング→検証→配布の5段でジョブを分け、検証で閾値を下回ったら配布を止める「ゲーティング」を設けます。閾値は厳格すぎると停止が多発するため、暫定幅(例:整合性違反0.2%までは許容)を設け、改善が進むたびに締めます。
プロファイリングの最小セット
列ごとのユニーク数、最頻値トップ10、NULL率、パターン分布(例:電話番号「xxx-xxxx-xxxx」比率)、外れ値の上位件を記録します。サンプリングは単純乱数ではなく、最新日付・主要ソース・大口顧客など層化サンプルを併用すると、実務上の痛点を外しません。
疑義データの扱い
自動修正できないデータは「保留キュー」に積み、所有者(アプリ、営業、サプライヤ)へ差し戻します。キューは件数だけでなく「金額影響」「顧客影響」も付与し、優先度を自動算出します。
品質ルール設計の勘所:必須・正規化・マスタ
品質はルールの粒度で決まります。曖昧な「郵便番号を正す」ではなく、実行順序と例外の扱いまで定義します。
必須・型・範囲の確定
- 必須:email/電話/都道府県/生年月日など、下流が使う順に優先度設定(例:スコアリングに生年月日必須)。
- 型:日付はISO8601、金額はdecimal(18,2)、電話はE.164形式へ正規化。
- 範囲:年齢は0〜120、注文数量は正数、発注日≤出荷日などの条件を宣言。
正規化の具体手順
- 空白・制御文字:前後空白除去、連続空白を1つに、改行/タブを削除。
- 全角/半角:英数記号は半角、カナは全角に統一。濁点結合や機種依存文字をNFKCで正規化。
- 住所:都道府県/市区町村/番地を列分割。丁目・番・号の表記ゆれを辞書で補正。
- メール:大文字を小文字化、余分なドットやエイリアス「+」はドメインポリシーに沿って扱いを決める(Gmailは+以降を無視等)。
マスタ・重複ルール
- 参照整合:都道府県コード、商品カテゴリ、取引先区分はマスタを唯一の真実源に。
- 重複判定:決定論(同一メール or 同一電話)→準決定論(同一氏名+生年月日+郵便番号前3桁)→確率論(Jaro-Winkler/Levenshtein閾値0.92以上)の順に適用。競合は最新更新日時を優先、ただしKYC済みは勝つなどビジネスルールで解決。
- 欠損補完:外部API/郵便辞書/履歴からの推定は「推定フラグ」を必ず付け、下流モデルで重みを調整可能にします。
ツールと自動化パターン:SQL/正規表現/MLの合わせ技
実装は「読みやすさ>短さ」。TRIM/REGEXP_REPLACEで前処理、ウィンドウ関数で重複スコアを集約、疑似キーを生成します。例えば電話の正規化は「非数字除去→先頭0を国番号に置換→E.164」を一関数にまとめ、単体テストを付けます。テストはCIで毎回走らせ、閾値を超えたら配布層(シルバー/ゴールド)への昇格を止めます。
機械学習を使うのは、名前表記ゆれや住所の曖昧マッチなど人手で管理しにくい領域に限定します。学習データは、過去のマージ判断ログと、マスタに同意されたレコードから作り、しきい値と手動レビューの境界を明示します(例:0.90以上は自動、0.80〜0.90は保留)。
日々の運用で役立つのが生成AIの補助です。ChatGPTやClaudeで正規表現の草案を作り、偽陽性/偽陰性の例を与えて改良します。CopilotはSQL/Pythonのリファクタやユニットテスト雛形の生成に向き、レビュー時間を短縮します。機密データは持ち出さず、サンプル化/マスキングした例でプロンプトするのが前提です。
監視と可視化
品質KPIはダッシュボード化し、指標ごとに「前日比」「週移動平均」「異常検知アラート」を設定します。原因切り分けのため、ソース別とカラム別のドリルダウン、影響額の見積もり(例:重複顧客×平均クーポン額)を併記します。
身近な企業活用例:地域スーパーの失敗と改善
状況:POS・アプリ登録・オンライン注文が別々に蓄積され、顧客重複が多発。失敗:クーポンを重複配信し、月間コストが120万円増、在庫予測も誤差21%に悪化しました。
対策は3週間で段階導入。まず品質KPIを「重複率1%→0.3%」に設定し、メール/電話/氏名+生年月日で決定論ルールを実装。住所は正規化辞書で丁目・番・号を統一しました。次に確率的マッチング(Jaro-Winkler 0.92)を追加し、0.85〜0.92は保留キューで店頭スタッフが週次確認。ChatGPTで重複スコア式の候補を複数作り、Claudeで境界事例のテストデータを増やして精度を底上げ。CopilotでSQLのウィンドウ関数と単体テストを整備しました。
結果、重複率は0.22%に低下。クーポン重複配布はゼロ、月間コストを94万円削減。在庫予測のMAPEは21%→13%に改善し、廃棄量が8%減。さらに「推定フラグ」を付けたことで、レコメンドの学習で重み調整が可能になり、アプリのクリック率が12%伸びました。現場負荷は、保留キューの優先度を「購入金額×来店頻度」で並べ替えることで、週あたりの確認時間を38%削減できました。
クレンジングは一度作って終わりではありません。新しいキャンペーンや入力フォーム改修のたびに表記ゆれが増えます。ミニマートは、フォームのバリデーションとデータ品質KPIを同じ担当が見える化し、「入力時に防ぐ」比率を上げ続けています。
まとめ:プラットフォームに埋め込むと効果が続く
データクレンジングは、ルール設計→自動化→検証→可視化→差し戻しの循環をどれだけ摩擦なく回せるかに尽きます。取り込み層での正規化、検証によるゲーティング、品質KPIのダッシュボード、保留キューのワークフローが一体化していると、現場との往復が速くなります。データ解析プラットフォーム事業においては、この循環を共通基盤として提供し、各ドメインの意思決定に直結する品質を持続的に担保することが、結局いちばん効率のよい価値提供になります。