HOW TO TD(User Engagement)Treasure Data User Engagement

データ品質を高めるデータプロファイリング

ホーム » データ品質を高めるデータプロファイリング

データマネジメントチームの森 達也です。
本記事では、データ品質の概要と、データ品質を高める最初のプロセスであるデータプロファイリングの実践方法をご紹介します。

データ品質とは

データ品質とは、「データ利用者の期待と要求を満たす度合いである」とされています。
高品質なデータは顧客体験の改善や、正しい意思決定などの恩恵をもたらす一方で、低品質なデータは、様々な問題を引き起こす可能性があります。例えば、氏名やメールアドレスなど重要な情報の入力に誤りがある場合、間違った情報を送ってしまったり、連絡が取れないなどの顧客満足度の低下、機会損失を招く恐れがあります。

筆者の経験上も、データソース間でデータ値やカラムの定義が異なっていて、統一するのに苦労したり、手入力のデータに欠損や不正確な情報があり、解釈を誤りそうになったなどデータ品質で苦しんだ場面が多々あります。

データに求められる目的は、ビジネス要求やデータ環境によって変化するので、ステークホルダー間の合意や継続的な見直しが必要となります。そのため全てのケースで当てはまる訳ではありませんが、データ品質の一般的な評価軸として下記があります。

正確性 データが「現実」の実態を正しく表していること
完全性 必要なデータが全て存在するかどうか
一貫性 データ値がデータセット間で一貫して表現されていること
整合性 データセット内において欠落がないか
妥当性 データパターンが期待を満たすかどうか
適時性 データが要求された時点、最新のものであるかどうか
一意性/重複排 エンティティがデータセット内に複数存在しないこと
有効性 データ値が定義された定義(データ型、書式、精度)と一致するかどう

出典:「データマネジメント知識体系ガイド 第二版」DAMA International (著), DAMA 日本支部 (翻訳), Metafind コンサルティング株式会社 (翻訳) 日経BP

データ品質管理のプロセス

データ品質を管理するには、データプロファイリング、データクレンジング、モニタリングのプロセスを経ることが一般的です。データプロファイリングでは、現状のデータを統計的手法を活用して検査して、データの理解を深めるとともに、データ品質における問題がないかを評価します。

データクレンジングでは、データプロファイリングで見つかった課題に対して、データの変換処理を行い、期待する品質に適合させます。クレンジングは時間のかかる作業なので、理想的にはデータソース側で課題が解決されることが、望ましいとされています。モニタリングでは、前段のプロセスでデータ品質の問題が解決されたか、データの変化により新しい問題が生じていないかを定期的に監視します。

データプロファイリングとは

データプロファイリングの実践方法についてご紹介します。対象データのボリュームや、求められる品質基準により異なりますが、トレジャーデータのご契約企業様だとSQL、BIツール、専門ツール(データプロファイリングツール)を活用されることが多いようです。ここでは効率的な作業が可能な、専門ツールによるデータプロファイリングを例にします。

データプロファイリングツールは、商用ツール含めて様々存在しますが、無償かつ容易に利用可能なものとしてPandas Profilingがあります。こちらはPythonで動作してPandasのDataframeを扱えるため、プログラミングは苦手という方でも、最低限の記述で動作させることができます。
Pandas Profiling: https://github.com/pandas-profiling/pandas-profiling

実行方法

実行環境としてはJupyter NotebookやGoogle Colaboratoryがお勧めです。それらの環境構築方法については割愛しますが、本稿ではGoogle Colaboratoryを使用した場合の、実行ステップをご説明します。

Step1
まず、必要なライブラリ(Pandas ProfilingとTreasure Data Python Clientなど)のインストールを行います。例えば下記のようなコードになります。

!pip install pandas-profiling==2.9.0
!pip install pytd[spark]
import pandas as pd
from pandas_profiling import ProfileReport
import pytd
import warnings

warnings.filterwarnings('ignore')
!pip show pandas_profiling

Step2
続いて対象データのある、Treasure Dataとの接続設定をします。API Keyの入力を求められるため、ご自身のAPI Key(Master Key)を入力します。またendpointもお使いのリージョンに合わせて変更して下さい。

API Keyの確認方法:https://docs.treasuredata.com/display/public/PD/Getting+Your+API+Keys
エンドポイント:https://docs.treasuredata.com/display/public/PD/Sites+and+Endpoints

from getpass import getpass
my_apikey = getpass()
client = pytd.Client(apikey=my_apikey, endpoint='https://api.treasuredata.com/', database='xxxx', default_engine='presto')

def TdProfileReport(query):
 res = client.query(query)
 df= pd.DataFrame(**res)
 return ProfileReport(df)

Step3
対象データを抽出するSQLを記述し、プロファイリングを実行します。プロファイリング処理自体は、Python上で実行されるため、データ量が多い場合は適切なレコード数にサンプリングをすることをお勧めいたします。

Prestoのサンプリング方法: https://prestodb.io/docs/current/sql/select.html#tablesample

query = '''
SELECT
 *
FROM
 mst_tduid_device TABLESAMPLE BERNOULLI (1)
'''
profile = TdProfileReport(query)
profile

実行結果

各ステップを実行すると、結果がレポートとして画面に表示されます。ご自身またはチームメンバーとレポートを見ながら、現状のデータについて共通理解を深めつつ、データ品質の各評価軸を満たしているかを議論する事になります。レポートの各パートについて簡単に説明していきます。

データセットの概要

データセット全体の概要(レコード数、欠損値、重複レコードの割合)などのが確認できます。重複や欠損値が存在する場合は、ここで検知することができます。

単一変数のプロファイリング

単一カラム毎に基礎的な統計量(NULL数、重複値、欠損値、最大値・最小値、平均・中央値)と度数分布などを確認できます。主キーとなるカラムに重複や欠損がないか(一意性)、カテゴリー変数の整合性、一貫性は取れているか、データ分布に妥当性はあるかなど評価が可能です。ここで品質上の問題が見つかった場合は、次のプロセスであるデータクレンジングでの改善を検討します。

複数変数のプロファイリング

複数カラムの相関関係が確認できます。複数変数間で、相関するものは何か、整合性が取れているか(矛盾がないか)などを確認することができます。ここで問題が見つかった場合は、同様にデータクレンジングでの改善を検討します。

おわりに

本稿ではデータ品質の定義と、データ品質管理の3つのプロセス(データプロファイリング、データクレンジング、モニタリング)、最初のステップとなるデータプロファイリングの方法についてご紹介しました。残りのステップとなるデータクレンジングやモニタリングについては、今後の記事にてご紹介できればと思います。最後までお読みいただき、ありがとうございました。

森 達也

Data Managementチーム

2013年から制作会社にてWeb/APP開発を経験。鉄道会社・ホテルチェーンのWebサイトや、SNS・観光アプリの設計/実装を担当。その後、ユーザー企業での経験を積みたいという想いから、ソフトウェアベンダーに転職。自社のB2Bデジタルマーケティング基盤の構築(Webリニューアル、MA導入、データ基盤構築など)に従事。データ領域の知見を深めたいと考え、トレジャーデータに入社。大手自動車メーカー、食品メーカー、メディアなど様々なデータ基盤構築に携わる。日本だけでなくAPAC地域も担当。

得意領域 : データ整備・連携、Workflow、SQL、Web・APP開発、B2Bマーケティング

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Back to top button