7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Vantageで機械学習モデルのトレーニングを行う方法

Last updated at Posted at 2022-09-22

著者 Adam Tworkiewicz
最終更新日 2021年9月12日

警告
本記事はTeradata CorporationのサイトGetting Startedに掲載された内容を抄訳したものです。掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。正確な内容については、原本をご参照下さい。
また、修正が必要な箇所や、ご要望についてはコメントをよろしくお願いします。

概要

機械学習モデルのアイデアを素早く検証したい場合があります。
・モデルの種類は決まっているますがまだMLパイプラインで運用する気はない。
・思い描いた関係が存在するかどうかをテストしたい。
・本番環境であっても、MLopsで常に再学習する必要がない。
そのような場合は、Vantageアナリティクス・ライブラリとそれがサポートする複数のMLモデルタイプを使用することができます。

前提条件

Teradata Vantageインスタンスにアクセスする必要があります。

Vantageの新しいインスタンスが必要な場合は、Google CloudAzureAWSのクラウドにVantage Expressという無料版をデプロイメントすることができます。また、VMwareVirtualBox、またはUTMを使用して、ローカルマシン上でVantage Expressを実行することもできます。

Vantageアナリティクス・ライブラリのインストール

Vantageで機械学習をサポートするには、Vantageアナリティクス・ライブラリが必要です。このセクションでは、VantageにVantageアナリティクス・ライブラリをインストールし、いくつかのサンプルデータをロードします。

① Vantageアナリティクス・ライブラリはrpmファイルとして配布されます。Teradata Downloads にアクセスし、Vantageアナリティクス・ライブラリのrpmをローカルマシンにダウンロードします。

② そのファイルをVantageインストールにアップロードします。Vantage Express をローカルで実行する場合、多くの方法があります。

VirtualBox on Vantage Expressをインストールした場合、ファイルをVMのデスクトップにドラッグ&ドロップすることができます。また、ポート4422に接続してscpを使用することもできます。

CopyrpmFile
scp -P 4422 ~/Downloads/VAL-2.0.0.3-1.x86_64.rpm root@localhost:/root/Desktop

□VMwareを使用していてドラッグ&ドロップが有効になっている場合は、ファイルを仮想マシンのデスクトップにドラッグ&ドロップすることができるはずです。

□VantageノードにSSHでアクセスできる場合は、scpコマンドを使ってバイナリをアップロードすることができます。

sshtoVantage
scp ~/Downloads/VAL-2.0.0.3-1.x86_64.rpm root@vantage.server.name:/tmp/

③ ここでVantageアナリティクス・ライブラリの関数とプロシージャがインストールされる新しいデータベースを作成します。Vantageアナリティクス・ライブラリをSYSLIBなどのグローバルな場所にインストールすることもできますが、特定のデータベースにインストールすることで何か問題が発生した場合にやり直すことが容易になります。VALというデータベースを作成し、ユーザーに適切なパーミッションを与えましょう。
データベース名とユーザーIDを利用している環境に合わせてください。

CreateDatabase.sql
CREATE DATABASE val
AS PERMANENT = 60e6, -- 60MB
    SPOOL = 120e6; -- 120MB

GRANT CREATE FUNCTION ON val to dbc;
GRANT ALTER FUNCTION ON val to dbc;
GRANT EXECUTE PROCEDURE on SQLJ.REMOVE_JAR to dbc;
GRANT EXECUTE PROCEDURE on SQLJ.INSTALL_JAR to dbc;
GRANT EXECUTE PROCEDURE on SQLJ.REPLACE_JAR to dbc;
GRANT CREATE EXTERNAL PROCEDURE ON val to dbc;

④ 仮想マシンでターミナルを開きインストール作業を開始します。必要に応じてrpmのパスを変更してください。

Runrpm
rpm -Uvh --nodeps ~/Desktop/VAL-2.0.0.3-1.x86_64.rpm

⑤ インストールウィザードは、ホスト名、ユーザID、およびパスワードの入力を要求します。Vantage Expressの仮想マシン上でインストールを実行する場合、値は次のとおりです。

□ホスト名:localhost
□ユーザID:dbc
□パスワード:dbc
□アカウント文字列:空白のまま、ENTERキーを押します。
□BTEQまたはFASTLOADコマンド:空白のまま、ENTERキーを押します。

⑥ ウィザードはVantageアナリティクス・ライブラリのどの部分をインストールするかを選択するよう求めます。まず、td_analyzeプロシージャ、つまりオプション1のインストールから始めたいと思います。オプション1を選択するとスクリプトはtd_analyzeがインストールされるデータベース名の入力を要求します。valを入力し、ENTERキーを押します。

⑦ ウィザードの途中でオプション5、すなわちTutorial Tablesをインストールします。これらは、サンプルモデルを構築するために使用するデータを含むサンプルテーブルです。

サンプルデータ

VAL とサンプルテーブルがロードされたので、データを調査してみましょう。これは架空のデータセットで、銀行の顧客 (1,000行程度)、口座 (10,000行程度)、取引 (100,000行程度) からなっています。これらは互いに次のような関係になっています。

画像1.png

ここからは表中のクレジットカードに関連しないすべての変数に基づいて銀行の顧客がクレジットカードで持っている毎月の平均残高を予測するモデルを構築できるかどうかを試します。

線形回帰モデルを作成する

まずは、上記の3つのテーブルを結合したワイドテーブル(Analytic Data Set、ADS)を作成しましょう。

以下のクエリーの実行にはVantageアナリティクス・ライブラリがインストールされているDatabaseのCREATE TABLE権限を持っている必要があります。

CreateTableADS.sql
-- Switch to val database.
DATABASE val;

-- Create the ADS.
CREATE TABLE VAL_ADS AS (
    SELECT
        T1.cust_id  AS cust_id
       ,MIN(T1.income) AS tot_income
       ,MIN(T1.age) AS tot_age
       ,MIN(T1.years_with_bank) AS tot_cust_years
       ,MIN(T1.nbr_children) AS tot_children
       ,CASE WHEN MIN(T1.marital_status) = 1 THEN 1 ELSE 0 END AS single_ind
       ,CASE WHEN MIN(T1.gender) = 'F' THEN 1 ELSE 0 END AS female_ind
       ,CASE WHEN MIN(T1.marital_status) = 2 THEN 1 ELSE 0 END AS married_ind
       ,CASE WHEN MIN(T1.marital_status) = 3 THEN 1 ELSE 0 END AS separated_ind
       ,MAX(CASE WHEN T1.state_code = 'CA' THEN 1 ELSE 0 END) AS ca_resident_ind
       ,MAX(CASE WHEN T1.state_code = 'NY' THEN 1 ELSE 0 END) AS ny_resident_ind
       ,MAX(CASE WHEN T1.state_code = 'TX' THEN 1 ELSE 0 END) AS tx_resident_ind
       ,MAX(CASE WHEN T1.state_code = 'IL' THEN 1 ELSE 0 END) AS il_resident_ind
       ,MAX(CASE WHEN T1.state_code = 'AZ' THEN 1 ELSE 0 END) AS az_resident_ind
       ,MAX(CASE WHEN T1.state_code = 'OH' THEN 1 ELSE 0 END) AS oh_resident_ind
       ,MAX(CASE WHEN T2.acct_type = 'CK' THEN 1 ELSE 0 END) AS ck_acct_ind
       ,MAX(CASE WHEN T2.acct_type = 'SV' THEN 1 ELSE 0 END) AS sv_acct_ind
       ,MAX(CASE WHEN T2.acct_type = 'CC' THEN 1 ELSE 0 END) AS cc_acct_ind
       ,AVG(CASE WHEN T2.acct_type = 'CK' THEN T2.starting_balance+T2.ending_balance ELSE 0 END) AS ck_avg_bal
       ,AVG(CASE WHEN T2.acct_type = 'SV' THEN T2.starting_balance+T2.ending_balance ELSE 0 END) AS sv_avg_bal
       ,AVG(CASE WHEN T2.acct_type = 'CC' THEN T2.starting_balance+T2.ending_balance ELSE 0 END) AS cc_avg_bal
       ,AVG(CASE WHEN T2.acct_type = 'CK' THEN T3.principal_amt+T3.interest_amt ELSE 0 END) AS ck_avg_tran_amt
       ,AVG(CASE WHEN T2.acct_type = 'SV' THEN T3.principal_amt+T3.interest_amt ELSE 0 END) AS sv_avg_tran_amt
       ,AVG(CASE WHEN T2.acct_type = 'CC' THEN T3.principal_amt+T3.interest_amt ELSE 0 END) AS cc_avg_tran_amt
       ,COUNT(CASE WHEN ((EXTRACT(MONTH FROM T3.tran_date) + 2) / 3) = 1 THEN T3.tran_id ELSE NULL END) AS q1_trans_cnt
       ,COUNT(CASE WHEN ((EXTRACT(MONTH FROM T3.tran_date) + 2) / 3) = 2 THEN T3.tran_id ELSE NULL END) AS q2_trans_cnt
       ,COUNT(CASE WHEN ((EXTRACT(MONTH FROM T3.tran_date) + 2) / 3) = 3 THEN T3.tran_id ELSE NULL END) AS q3_trans_cnt
       ,COUNT(CASE WHEN ((EXTRACT(MONTH FROM T3.tran_date) + 2) / 3) = 4 THEN T3.tran_id ELSE NULL END) AS q4_trans_cnt
    FROM Customer AS T1
        LEFT OUTER JOIN Accounts AS T2
            ON T1.cust_id = T2.cust_id
        LEFT OUTER JOIN Transactions AS T3
            ON T2.acct_nbr = T3.acct_nbr
GROUP BY T1.cust_id) WITH DATA UNIQUE PRIMARY INDEX (cust_id);

データセットからパラメータを取得して、クレジットカードの月次残高を予測する線形回帰モデルを構築します。

td_analyze を呼び出して、線形モデルを作成します。入力はテーブル VAL_ADS にあり、複数の列で構成されています。従属変数はcc_avg_balです。モデルは、LINEAR_REGRESSION_DEMOというテーブルとしてvalデータベースに書き込まれます。

RunLinear.sql
call td_analyze('linear',
  'database=val;
  tablename=VAL_ADS;
  columns=tot_age,tot_income,tot_cust_years,tot_children,single_ind,female_ind,married_ind,separated_ind,ck_acct_ind,sv_acct_ind,sv_avg_bal,ck_avg_bal,ca_resident_ind,ny_resident_ind,tx_resident_ind,il_resident_ind,az_resident_ind,oh_resident_ind;
  dependent=cc_avg_bal;
  outputdatabase=val;
  outputtablename=linear_regression_demo');

このプロシージャではいくつかの出力テーブルが作成されます。この時点でテーブルの中身を確認する必要はありません。それでは新しく作成されたモデルを使ってどのようにスコアリングを行うかを見てみましょう。

スコアリング

このモデルを使って、予測を行い、スコアを評価しましょう。これを行うには、linearscoreパラメータを指定してtd_analyzeを呼び出します。
入力テーブル(VAL_ADS)、モデルテーブル(prefix linear_regression_demo)を指定し、valデータベースのターゲットテーブル(linear_regression_score)を作成しています。

RunLinearscore.sql
call td_analyze('linearscore',
  'database=val;
  tablename=VAL_ADS;
  modeldatabase=val;
  modeltablename=linear_regression_demo;
  outputdatabase=val;
  outputtablename=linear_regression_score;
  predicted=estimate;
  retain=cc_avg_bal;
  scoringmethod=scoreandevaluate;');

その結果、実際のバランス、予測されたバランス、そしてこの2つの差を含む linear_regression_score テーブルが得られます。
結果のサンプルを見てみましょう。

SelectLinearRegressionScore.sql
SELECT * FROM linear_regression_score SAMPLE 10;

このクエリーで結果が得られるでしょう。

cust_id cc_avg_bal estimate Residual
1362498 0.0 284.7057772484358 -284.7057772484358
1362828 1184.35 463.74177458594215 720.6082254140578
1362839 2933.135802469136 982.9240031182255 1950.2117993509103
1362986 500.9148148148148 881.4116539412856 -380.4968391264708
1362511 235.85941489361701 294.35369563202846 -58.494280738411426
1363134 0.0 430.27950420065997 -430.27950420065997
1363481 0.0 411.2359958542745 -411.2359958542745
1362644 209.3304347826087 279.75770904482033 -70.42727426221163
1363141 0.0 550.1681921045503 -550.1681921045503
1363290 0.0 120.35348558871233 -120.35348558871233

まとめ

今回のクイックスタートでは、SQLで機械学習モデルを作成する方法について学びました。方法としては、Vantageアナリティクス・ライブラリを使用しました。線形回帰モデルを構築しそのモデルを使用して予測を実行することがSQLのみで行うことができました。

#さらに詳しく
 ・Vantage Analytics Library User Guide

Teradata Vantageへのお問合せ

Teradata Vantage へのお問合せ

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?