ClearScape Analyticsで探索と前処理をSQLで通す

実務

この記事で分かること

  • ClearScape の分析関数を、Python に出さず SQL で呼ぶ進め方
  • 最初に触るとよい探索・前処理の関数(要約、分布、欠損、外れ値、標準化)
  • Fit → Transform の2段が何か
  • 小さな表で通してから本番に近づける判断

結論(先に要点)

機械学習の学習関数(k-means や GLM)の前に、現場で詰まりやすいのはデータの中身です。
ClearScape Analytics では、その確認と前処理を データベース内の関数 でやれます。

呼び方はだいたい次です。

SELECT * FROM TD_関数名(
  ON 入力表 AS InputTable
  USING
    引数
) AS dt;

最初に通すなら、学習より 探索と前処理 です。

やりたいこと 関数
平均・中央値などの要約 TD_UnivariateStatistics
分布(ビン) TD_Histogram
欠損のない行だけ残す TD_GetRowsWithoutMissingValues
欠損を統計値で埋める TD_SimpleImputeFit → TD_SimpleImputeTransform
外れ値を外す TD_OutlierFilterFit → TD_OutlierFilterTransform
標準化 TD_ScaleFit → TD_ScaleTransform

Fit は「埋め方・閾値の表」を作る段、Transform はその表を DIMENSION で当てはめる段です。

※ 本稿のデータベース名・テーブル名・列名は説明用の仮名です。関数が自分の環境に入っていることが前提です。

前提

  • ClearScape Analytics の in-database 関数が使える(Experience 環境、または自環境にインストール済み)
  • 呼び出しは Teradata Studio / BTEQ など、いつもの SQL クライアントでよい
  • いきなり巨大明細ではなく、数十行の確認用表で通す

関数が見つからないときは、カタログやインストール先(よくあるのは SYSLIB など)を先に確認します。入っていなければ、この記事の SQL は動きません。

確認用の小さな表

欠損と、極端に大きい金額を少し混ぜます。

CREATE TABLE example_db.shop_orders (
  order_id   INTEGER,
  store_id   INTEGER,
  amount     DECIMAL(12,2),
  qty        INTEGER
);

INSERT INTO example_db.shop_orders VALUES (1, 101, 1200.00, 2);
INSERT INTO example_db.shop_orders VALUES (2, 101, NULL,    1);
INSERT INTO example_db.shop_orders VALUES (3, 102,  980.00, NULL);
INSERT INTO example_db.shop_orders VALUES (4, 102, 1100.00, 3);
INSERT INTO example_db.shop_orders VALUES (5, 103, 99999.00, 1);  -- 外れ値のイメージ

手順1:要約を見る

SELECT *
FROM TD_UnivariateStatistics (
  ON example_db.shop_orders AS InputTable
  USING
    TargetColumns('amount', 'qty')
    Stats('MEAN', 'MEDIAN', 'MODE')
) AS dt;

列ごとの平均・中央値が出ます。NULL がある列でも、まず「だいたいの位置」が分かります。

手順2:分布を見る

SELECT *
FROM TD_Histogram (
  ON example_db.shop_orders AS InputTable
  USING
    TargetColumn('amount')
    MethodType('STURGES')
) AS dt
ORDER BY 1, 2;

ビンの切れ方は STURGES で足ることが多いです。本数が欲しければ Equal-Width と NBins を使います。

手順3:欠損行を落とすか、埋めるか

落とす(完全な行だけ残す):

SELECT *
FROM TD_GetRowsWithoutMissingValues (
  ON example_db.shop_orders AS InputTable
  USING
    TargetColumns('amount', 'qty')
) AS dt;

埋める(Fit で埋め方を決め、Transform で適用):

CREATE TABLE example_db.shop_orders_impute_fit AS (
  SELECT *
  FROM TD_SimpleImputeFit (
    ON example_db.shop_orders AS InputTable
    USING
      ColsForStats('amount', 'qty')
      Stats('MEDIAN', 'MEDIAN')
  ) AS dt
) WITH DATA;

CREATE TABLE example_db.shop_orders_imputed AS (
  SELECT *
  FROM TD_SimpleImputeTransform (
    ON example_db.shop_orders AS InputTable
    ON example_db.shop_orders_impute_fit AS FitTable DIMENSION
  ) AS dt
) WITH DATA;

Stats は ColsForStats と同じ順です。数値なら MEAN / MEDIAN などが使えます。

手順4:外れ値を外す

CREATE TABLE example_db.shop_orders_outlier_fit AS (
  SELECT *
  FROM TD_OutlierFilterFit (
    ON example_db.shop_orders_imputed AS InputTable
    USING
      TargetColumns('amount')
  ) AS dt
) WITH DATA;

CREATE TABLE example_db.shop_orders_filtered AS (
  SELECT *
  FROM TD_OutlierFilterTransform (
    ON example_db.shop_orders_imputed AS InputTable
    ON example_db.shop_orders_outlier_fit AS FitTable DIMENSION
  ) AS dt
) WITH DATA;

Fit 側に分位点などの閾値が入り、Transform で行が落ちます(または置換。引数で変わります)。
99999 のような極端な金額が、ここで外れるイメージです。

手順5:標準化する(学習の前段)

GLM などは、公式でも 先に標準化 と書かれています。探索の延長で、ここまで通しておくと次が楽です。

CREATE TABLE example_db.shop_orders_scale_fit AS (
  SELECT *
  FROM TD_ScaleFit (
    ON example_db.shop_orders_filtered AS InputTable
    USING
      TargetColumns('amount', 'qty')
      ScaleMethod('STD')
  ) AS dt
) WITH DATA;

CREATE TABLE example_db.shop_orders_scaled AS (
  SELECT *
  FROM TD_ScaleTransform (
    ON example_db.shop_orders_filtered AS InputTable
    ON example_db.shop_orders_scale_fit AS FitTable DIMENSION
  ) AS dt
) WITH DATA;

STD は平均0・分散1の定番です。結果テーブルに残す考え方は BigQuery 側の結果テーブル化 と同じで、確認用は名前を付けて残します。

Fit と Transform の切り分け

段 役割
Fit 中央値、分位点、平均と標準偏差など、「当てはめ方」を表にする
Transform その表を DIMENSION で渡し、本体データに適用する

学習用と適用用で表が分かれるときも、Fit を使い回せます。
Fit なしで Transform だけ呼ぶと動きません。

失敗例と回避策

  • 失敗: 本番の巨大明細でいきなり関数を回す
    回避: まず数十行の確認用表で、出力列と件数を見る
  • 失敗: Fit テーブルを作らず Transform する
    回避: 先に Fit、DIMENSION で渡す
  • 失敗: 関数名が解決せずエラーになる
    回避: ClearScape / 分析関数が入っているか、インストール先データベースを確認する
  • 失敗: 要約を見て穴埋めしたつもりで、元表を直接学習に渡す
    回避: Transform 後の表を学習・次工程の入力にする

まとめ

  • ClearScape の探索・前処理は、SELECT * FROM TD_...() で SQL から呼べる
  • 最初は要約・分布・欠損・外れ値・標準化
  • 穴埋め・外れ値・標準化は Fit → Transform
  • 小さな表で通してから、対象を広げる

学習(k-means など)は、この前処理の次の話です。

次に読む

タイトルとURLをコピーしました