Upload
insight-technology-inc
View
761
Download
4
Embed Size (px)
Citation preview
© Copyright 2016 Hewlett Packard Enterprise Development LP. The information contained herein is subject to change without notice.
最新版VerticaのAnalytics機能を駆使して実現する簡単ログ分析日本ヒューレット・パッカード株式会社シニアプリセールスコンサルタント大薗 純平2016年7月13日
2
自己紹介
–大薗純平
–日本のVerticaプリセールスリードをしています
–Verticaのデータベースとしての素晴らしさに魅せられて早5年たくさんの人にVerticaのよさを知ってもらい、使ってもらい、抱えている悩みや不満を解消してもらうために、日々啓蒙活動中
2
※VerticaやPostgresの生みの親であるDB研究開発者
3
Verticaのコアテクノロジーおさらい
• 2015年VLDB 10-
Year Best Paper
Awardを受賞した
C-Storeがベース
• 必要な列データの
みの読み込み
真の列指向DB
• 独立したノードを
ネットワークでつな
いで構成
• マルチマスター
ノード構成により、
高可用性・高拡張
性を実現
MPPクラスタリング
• カラムのデータ属
性に応じた最適な
圧縮アルゴリズム
を適用
• I/O削減によるス
ループット向上
• 物理ストレージ容
量の削減
高度な圧縮
• クエリーに最適な
圧縮、ソート、分散
が事前に実施され
たデータセット
• 必要なデータをよ
り速く取り出すため
のVertica独自の
仕組み
プロジェクション
4
要は
分析処理が速い
拡張性が高い
同時実行に強い
5
データ量
PB
1TB
10TB
100TB
利用
ユーザー数
部門データマートPOS/CRM/SCM etc
企業データウェアハウスPOS/CRM/SCM etc
ログ分析基盤Web clickstream/Smart Meter/Sensor/Network monitoring etc
Verticaの適用ユースケース
6
本日お伝えしたいこと
6
ログ分析のための豊富な機能がある
2016/7時点最新版 v7.2.3
分析処理が速い拡張性が高い同時実行に強い
よくある誤解①
8
ログデータ(JSON等)は、ETLツールやHadoopソリューションで構造化してからVerticaにロードするしかない
8
ETL/Hadoopログデータ
99
それももちろんOKですが…
方法はそれだけではありません!
10
フレックステーブル機能を使用して、ログを直接Verticaに取り込めます!
10
フレックステーブル機能
ログデータ
直接取り込み
ETLやMap/Reduceロジックの実装不要DBに入れてからSQLで操作
よくある誤解②
1212
ログ分析のロジックは、標準SQL関数を組み合わせて作る orユーザー定義関数を組むしかない
SQL ‘99
標準 Analytic SQL
– Window 関数– 統計関数– Geospatial関数
ユーザー定義関数– Java
– C++
– R
SDKs
? ?
1313
それももちろんOKですが…
便利な独自関数も使えます!
1414
すぐに使えるログ分析用のSQL拡張関数が充実しています!
SQL ‘99
標準 Analytic SQL
– Window 関数– 統計関数– Geospatial関数
ユーザー定義関数– Java
– C++
– R
SDKs
! !HPE Vertica’s
SQL Extensions
独自の分析用関数– Time Series
– Event Based Window
– Pattern Matching
よくある誤解③
1616
機械学習的な分析は、データマイニングツールやR, Python, Spark/MLlib等で実装するしかない
1717
それはもちろん王道ですが…
VerticaならSQLでできちゃいます!
1818
Vertica内でも、SQLを使って機械学習系の分析ができます!
In-DB Machine Learning
19
本日のテーマ
1.フレックステーブル機能
2.ログ分析用のSQL拡張関数
3.機械学習系の分析
19
20
本日のテーマ
1.フレックステーブル機能
2.ログ分析用のSQL拡張関数
3.機械学習系の分析
20
21
フレックステーブル機能:さまざまな形式のログデータも簡単に取り込める
データソース側の構造が変わっても、Vertica側で柔軟にスキーマ構造を変更(その他半構造化/構造化データにも対応)
CEF
{ "name": "Everest",
"type":"mountain",
"height": 29029,
"hike_safety": 34.1 }
{ "name": "Mt St Helens",
"type": "volcano",
"hike_safety": 15.4 }
テーブル
フレックス形式
name type height hike_safety
MAPKeyValue
TSV
カラムナー形式
テーブル
フレックス形式
hike_safety
カラムナー形式
name
type
データソースログ、センサー、ソーシャルデータ etc
テーブルに蓄積したログを使用して有効な分析パターンの発掘
2
height
分析の軸となる列をカラムナー形式に追加3
name type
データを専用Parserで解析しながらロード※Vertica側にテーブルの列名の事前定義は不要
1
Parse Serialize
※
22
フレックステーブル機能を使ってJSONデータを取り込んでみる
Tweets.json
1. JSONファイルの準備
23
1. JSONファイルの準備
– Twitter Public APIよりJSONファイルを取得し、Verticaノードに配置
– GET https://api.twitter.com/1.1/search/tweets.json?q=%23Vertica&count=100
– JSONは、ネスト、配列構造の形式をサポート
{
"statuses":
[
{
"created_at": "Fri Jul 08 10:15:21 +0000 2016",
"text": "\u30107\/28\uff08\u6728\uff0916:00-17:30 … …",
:
"user": {
"screen_name": "jostandard",
:
},
:
"lang": "ja"
},
:
]
}
24
フレックステーブル機能を使ってJSONデータを取り込んでみる
Tweets.json [Flex Table]
Tweets
2. フレックステーブル作成
[Flex Table]
Tweets_keys
[Flex View]
Tweets_view
Tweetsテーブル作成時、以下も同時に生成・Tweets_keys(キー構成管理テーブル)・Tweets_view(参照用ビュー)
25
2. フレックステーブル作成
– フレックステーブルの作成
–作成されたオブジェクト定義(テーブル、ビュー)の確認
Schema | Name | Kind | Owner | Comment
--------+--------------+-------+---------+---------
public | tweets | table | dbadmin | ← フレックステーブルpublic | tweets_keys | table | dbadmin | ← フレックステーブルのキー構成public | tweets_view | view | dbadmin | ← フレックステーブルの参照用ビュー
\dtv tweets*
CREATE FLEX TABLE tweets(); 列名指定は不要(列名の明示指定も可能)
26
フレックステーブル機能を使ってJSONデータを取り込んでみる
Tweets.json [Flex Table]
Tweets
3. データロード
[Flex Table]
Tweets_keys
[Flex View]
Tweets_view
27
3. フレックステーブルへのデータロード
–データロード
–データ確認(*で全項目抽出)
今回はデータがJSONなのでfjsonparserを使用する
COPY tweets FROM '/home/dbadmin/tweets.json'
PARSER fjsonparser(start_point='statuses');
__identity__ | __raw__
--------------+--------------------------------------------------
1 | \001\000\000\000(\005\000\000K\000\000\000...
2 | \001\000\000\000(\005\000\000K\000\000\000...
SELECT * FROM tweets;
フレックステーブルに実際に格納されているデータ= Key(連番) + Value(バイナリー)
29
3. フレックステーブルへのデータロード
–プロジェクション定義の確認
CREATE PROJECTION public.tweets /*+createtype(P)*/
(
__identity__,
__raw__
)
AS
SELECT tweets.__identity__,
tweets.__raw__
FROM public.tweets
ORDER BY tweets.__identity__
SEGMENTED BY hash(tweets.__identity__) ALL NODES KSAFE 1;
SELECT export_objects('','tweets'); Keyカラム+ Valueカラムのみ
30
3. フレックステーブルへのデータロード
–データ確認(列名を直接指定)
created_at | user.screen_name | text
---------------------+------------------+-----------------------------------------------------------------------------
2016-07-08 19:15:21 | jostandard | 【7/28(木)16:00-17:30 開催】第3回VertiCafe https://t.co/Cj7T1btvBh #Vertica
2016-07-08 10:10:15 | BigDataTweetBot | RT @HPE_BigData: Learn the value of a #SmartBuilding ecosystem:
https://t.co/H1gD7aCDJv #IoT #BigData #Vertica https://t.co/CyuSUjEIaz
2016-07-08 10:00:01 | HPE_BigData | Learn the value of a #SmartBuilding ecosystem: https://t.co/H1gD7aCDJv #IoT
#BigData #Vertica https://t.co/CyuSUjEIaz
:
:
SELECT
created_at::timestamp(0)
,"user.screen_name"
,text
FROM tweets order by 1 desc;
予め列名を知っていれば、通常テーブルのように検索できる
31
フレックステーブル機能を使ってJSONデータを取り込んでみる
Tweets.json [Flex Table]
Tweets
[Flex Table]
Tweets_keys
[Flex View]
Tweets_view
4. キー構成更新とビュー定義のビルド
32
4. フレックステーブルのキー構成更新とビュー定義のビルド
キー構成更新?
ビュー定義のビルド?
最新のフレックステーブルの列名とデータ型を検知し、管理テーブルに格納
最新のフレックステーブルの列名とデータ型にて、参照用ビューを作成
33
4. フレックステーブルのキー構成更新とビュー定義のビルド
– フレックステーブルのキー構成更新とビュー定義のビルド
–キー構成(列名およびデータ型)の確認が可能
key_name | frequency | data_type_guess
--------------------------------------+-----------+-----------------
coordinates | 10 | Varchar(20)
entities.media | 5 | long varbinary(1920)
:created_at | 10 | TimestampTz
:user.statuses_count | 10 | Integer
(142 rows)
取り込んだデータの列名とデータ型を認識できる
SELECT compute_flextable_keys_and_build_view('tweets');
SELECT * FROM tweets_keys;
34
4. フレックステーブルのキー構成更新とビュー定義のビルド
–ビュー経由での確認が可能になる
contributors |
coordinates |
created_at | 2016-07-08 19:15:21+09
:
text | 【7/28(木)16:00-17:30 開催】第3回VertiCafe
https://t.co/Cj7T1btvBh #Vertica
:
retweeted_status.entities.media |
SELECT * FROM tweets_view limit 1;
Keyカラム+ Valueカラムではなく、各カラムを正しいデータ型で認識する
例)TimestampTz
で取り扱われる
35
Tips: フレックステーブルのデータ型決定の精度を向上
–デフォルトでは、フレックステーブルキー更新時、すべてのデータが文字列型として認識される
– DBパラメーター「EnableBetterFlexTypeGuessing」を有効化することで、文字列型だけでなく、BOOLEAN、INTEGER、FLOAT、TIMESTAMP、DATEなど、データ内容に準じたデータ型として認識する精度が高くなる
35
compute_flextable_keys() orcompute_flextable_keys_and_build_view()
Flex table: users
users_keys
age: varchar intcreated: char(10) datename: varchar
SELECT SET_CONFIG_PARAMETER('EnableBetterFlexTypeGuessing',1);
36
フレックステーブル機能を使ってJSONデータを取り込んでみる
Tweets.json [Flex Table]
Tweets
[Flex Table]
Tweets_keys
[Flex View]
Tweets_view
[Flex Table]
Tweets
5. カラムナー形式の列を追加
37
5. フレックステーブルにカラムナー形式の列を追加
– フレックステーブルに取り込んだフィールドのうち、1つの列をカラムナー形式の列として追加
WHERE句やGROUP BY句などの検索条件キーとなるような列を追加すると、性能向上に効果的
ALTER TABLE tweets
ADD COLUMN "user.screen_name" varchar DEFAULT "user.screen_name"::varchar ;
38
5. フレックステーブルにカラムナー形式の列を追加
–プロジェクション定義の確認
プロジェクションに列が追加される
CREATE PROJECTION public.tweets /*+createtype(P)*/
(
__identity__,
__raw__,
"user.screen_name"
)
AS
SELECT tweets.__identity__,
tweets.__raw__,
tweets."user.screen_name"
FROM public.tweets
ORDER BY tweets.__identity__
SEGMENTED BY hash(tweets.__identity__) ALL NODES KSAFE 1;
SELECT export_objects('','tweets');
39
フレックステーブル機能を使ってJSONデータを取り込んでみる
Tweets.json [Flex Table]
Tweets
[Flex Table]
Tweets_keys
[Flex View]
Tweets_view
[Flex Table]
Tweets
DBD
6. DBDの実行(*)
Query
* DBD(Database Designer)の詳細については、以下の資料をご参照くださいマイケルストーンブレーカー発の超高速データベースで実現する分析基盤の簡単構築・運用ステップ
40
–プロジェクション定義の確認
6. フレックステーブルにデータベースデザイナーを実行
CREATE PROJECTION public.tweets_DBD_1_rep_flex_dbd /*+createtype(D)*/
(
__identity__,
__raw__,
"user.screen_name"
)
AS
SELECT tweets.__identity__,
tweets.__raw__,
tweets."user.screen_name"
FROM public.tweets
ORDER BY tweets."user.screen_name"
UNSEGMENTED ALL NODES;
SELECT export_objects('','tweets');
■DBDに与えたクエリーSELECT
"user.screen_name"
,sum(retweet_count)
From
tweets
group by 1
order by 2 desc;
プロジェクションを最適化
41
まとめフレックステーブル機能を使用して、ログを直接Verticaに取り込めます!
41
フレックステーブル機能
ログデータ
直接取り込み
ETLやMap/Reduceロジックの実装不要DBに入れてからSQLで操作
42
本日のテーマ
1.フレックステーブル機能
2.ログ分析用のSQL拡張関数
3.機械学習系の分析
42
43
Verticaの主な分析SQL機能
Vertica SQLStandard SQL-99 Conventions
Vertica Extended-SQLAdvanced Analytics with SQL
Vertica User Defined Extensions
Aggregate Sessionization Analytics
• C++
• Java
• R
Connection
• ODBC/JDBC
• HIVE
• Hadoop
• Flex Zone
Analytical Time Series• Time slice
• Interpolation (Constant & Linear)
• Gap Filling
• Aggregate
Window Functions Event-based Windows• Conditional Change Event
• Conditional True Event
Graph Event Series Joins
Monte Carlo Social Media/Pulse• Text Mining
• Patterns/Trends
Geospatial Pattern Matching• Match, Define, Pattern Keywords
• Funnel Analysis
時系列の補間
イベントのグルーピング
パターンマッチング
44
Time Series(時系列の補間)
できること:
格納されているログデータの時間間隔とは異なる時間間隔で、データを抽出
Device
v1.0
VDevice
v1.0
Device
v2.0
Device
v2.1.2
Device
v2.2.5
Device
v2.7.0
Device
v3.1
Device
v4.0
Device
v4.1
Device
v3.0
(たとえば、さまざまな機器から取得されるログは、すべて同じ間隔で収集されているとは限らない)
45
例:
SELECT * FROM TickStore;
Time Series(時系列の補間)
データベースには、両方の株式の入札のイベントが全て含まれているが、これらのイベントは常に一定の時間間隔で起こっているわけではなく、同じ時間の入札価格の動きを比較するのが難しい
ts symbol bid
2016-01-01 03:00:00 XYZ 10
2016-01-01 03:00:05 XYZ 10.5
2016-01-01 03:00:00 ABC 7
2016-01-01 03:00:06 ABC 6.7
複数の株式銘柄の入札価格の相関関係を分析
46
例:
Time Series(時系列の補間)
SELECT
slice_time
,symbol
,TS_FIRST_VALUE(bid, 'CONST') bid
FROM
Tickstore
TIMESERIES slice_time AS '2 seconds'
OVER( PARTITION BY symbol ORDER BY ts );
Symbol(ティッカー・シンボル)でグループ化し、ts(時系列)で並び替えられたウィンドウの時間データを上から読んでいき、2秒間隔になるようにデータを整形
ts symbol bid
2016-01-01 03:00:00 XYZ 10
2016-01-01 03:00:02 XYZ 10
2016-01-01 03:00:04 XYZ 10
2016-01-01 03:00:00 ABC 7
2016-01-01 03:00:02 ABC 7
2016-01-01 03:00:04 ABC 7
2016-01-01 03:00:06 ABC 6.7
欠損している時間帯は、前の時間から定数データ(CONST)を補間
定数補間
複数の株式銘柄の入札価格の相関関係を分析
47
例:
Time Series(時系列の補間)
SELECT
slice_time
,symbol
,TS_FIRST_VALUE(bid, 'LINEAR') bid
FROM
Tickstore
TIMESERIES slice_time AS '2 seconds'
OVER( PARTITION BY symbol ORDER BY ts );
ts symbol bid
2016-01-01 03:00:00 XYZ 10
2016-01-01 03:00:02 XYZ 10.2
2016-01-01 03:00:04 XYZ 10.4
2016-01-01 03:00:00 ABC 7
2016-01-01 03:00:02 ABC 6.9
2016-01-01 03:00:04 ABC 6.8
2016-01-01 03:00:06 ABC 6.7
線形補間
複数の株式銘柄の入札価格の相関関係を分析
Symbol(ティッカー・シンボル)でグループ化し、ts(時系列)で並び替えられたウィンドウの時間データを上から読んでいき、2秒間隔になるようにデータを整形
欠損している時間帯は、前後の時間から線形データ(LINEAR)を補間
48
例:
Time Series(時系列の補間)
定数補間 線形補間
複数の株式銘柄の入札価格の相関関係を分析
3:00:03のデータを直前3:00:00の値で補間3:00:02, 3:00:04のデータを
3:00:00~3:00:05の間の線形値で補間
49
Event Based Windows(イベントのグルーピング)
できること:
時系列データにおいて、特定のイベント発生ごとにデータをグルーピングする
あるユーザーのアクションの軌跡
50
Event Based Windows(イベントのグルーピング)
例:
• Webのクリックストリーム分析におけるセッション化• あるユーザーからの接続において、「クリック間の時間が120秒以上離れている場合」は、セッションが切断された(Webサイトを一時離脱した)と判断し、別のセッション情報として分析
SELECT
userId,
timestamp,
click_url,
CONDITIONAL_TRUE_EVENT(
timestamp - LAG(timestamp) > ‘120 seconds‘
) OVER( PARTITION BY userId ORDER BY timestamp ) AS session
FROM
Click_stream;
該当ウィンドウの中で、クリックとクリックの間の時間が120秒を越える場合は、新しいセッションとして値をIncrement
userId(ユーザーID)でグループ化し、timestamp(時間)で並び替えられたウィンドウ
51
Event Based Windows(イベントのグルーピング)
例:
user_id timestamp click_url
1 15:00:00 www.hogehoge.com/view_skydiving
1 15:00:25 www.hogehoge.com/purchase_skydiving
1 15:00:45 www.hogehoge.com/purchase_complete
1 15:03:45 www.hogehoge.com/view_skydiving
2 15:05:45 www.hogehoge.com/view_yoga
2 15:05:55 www.hogehoge.com/view_boatreantal
2 15:10:00 www.hogehoge.com/view_fandango
user_id timestamp click_url Session
1 15:00:00 www.hogehoge.com/view_skydiving 0
1 15:00:25 www.hogehoge.com/purchase_skydiving 0
1 15:00:45 www.hogehoge.com/purchase_complete 0
1 15:02:55 www.hogehoge.com/view_skydiving 1
2 15:03:15 www.hogehoge.com/view_yoga 0
2 15:03:55 www.hogehoge.com/view_boatreantal 0
2 15:06:55 www.hogehoge.com/view_fandango 1
120秒以上間隔が開いている場
合は別セッションとして取り扱うよう、Session列をインクリメント
ユーザー1のグループイベント1
ユーザー1のグループイベント2
ユーザー2のグループイベント1
ユーザー2のグループイベント2
+130秒
+180秒
52
Pattern Matching(パターンマッチング)
できること:
一連のイベントパターンにマッチしたログを抽出
A
SQL
Pattern
Matching
(A,B+,C)
Id=1
Id=2
Id=3
BBC
AC
ABC
AId=1 B
BC
Id=3ABC
53
Pattern Matching(パターンマッチング)
例:
• Webのクリックストリーム分析• db-techサイトのホームURLを参照(ラベル=ENTRY)し、サイト内の任意のURLを1回以上参照(ラベル
=ONSITE)したのち、購買用ページで商品購入(ラベル=PURCHASE)したユーザーのログを抽出
SELECT uid, sid, refurl, pageurl, action, event_name()
FROM clickstream_log
MATCH( PARTITION BY uid
ORDER BY timestamp
DEFINE
ENTRY as PageURL ILIKE ‘%db-tech.com/home%’ and Action = 'V',
ONSITE as PageURL ILIKE ‘%db-tech.com%’ and Action = 'V',
PURCHASE as PageURL ILIKE '%db-tech.com/purchase%' and Action = 'P'
PATTERN P as ( ENTRY ONSITE+ PURCHASE )
);
uid(ユーザーID)でグループ化し、timestamp(時系列)で並び替えられたウィンドウ
ラベルと条件
『ENTRY1回→ONSITE1回以上→PURCHASE』のパターンを定義
54
Pattern Matching(パターンマッチング)
例:
timestamp uid sid refurl pageurl action
7/1/2016 8:16 1 1 db-tech.com db-tech.com/home V
7/1/2016 8:17 1 1 db-tech.com/home db-tech.com/onsite V
7/1/2016 8:18 1 1 db-tech.com/onsite db-tech.com/onsite2 V
7/1/2016 8:20 1 1 db-tech.com/onsite2 db-tech.com/onsite3 V
7/1/2016 8:22 1 1 db-tech.com/onsite3 db-tech.com/purchase V
7/1/2016 8:25 1 1 db-tech.com/purchase db-tech.com/purchase P
7/1/2016 8:30 2 1 db-tech.com db-tech.com/home V
7/1/2016 8:31 2 1 db-tech.com/home db-tech.com/onsite V
7/1/2016 8:32 2 1 db-tech.com/onsite db-tech.com/onsite2 V
7/1/2016 8:33 2 1 db-tech.com/onsite2 db-tech.com/onsite B
7/1/2016 8:34 2 1 db-tech.com/onsite db-tech.com/purchase V
7/1/2016 8:40 2 1 db-tech.com/purchase db-tech.com/purchase P
7/1/2016 8:50 3 1 db-tech.com db-tech.com/home V
7/1/2016 8:55 3 1 db-tech.com/home db-tech.com/purchase P
uid sid refurl pageurl action event_name
1 1 db-tech.com db-tech.com/home V ENTRY
1 1 db-tech.com/home db-tech.com/onsite V ONSITE
1 1 db-tech.com/onsite db-tech.com/onsite2 V ONSITE
1 1 db-tech.com/onsite2 db-tech.com/onsite3 V ONSITE
1 1 db-tech.com/onsite3 db-tech.com/purchase V ONSITE
1 1 db-tech.com/purchase db-tech.com/purchase P PURCHASE
ユーザーごとのアクセスログを時系列で並び替え、『ENTRY1回→ONSITE1回以上→PURCHASE』
のパターンにマッチしたもののみを抽出
5555
まとめすぐに使えるログ分析用のSQL拡張関数が充実しています!
SQL ‘99
標準 Analytic SQL
– Window 関数– 統計関数– Geospatial関数
ユーザー定義関数– Java
– C++
– R
SDKs
! !HPE Vertica’s
SQL Extensions
独自の分析用関数– Time Series
– Event Based Window
– Pattern Matching
56
本日のテーマ
1.フレックステーブル機能
2.ログ分析用のSQL拡張関数
3.機械学習系の分析
56
57
Verticaで機械学習 In-DB Machine Learning
– SQLで機械学習系のアルゴリズムが実行できる
– Verticaの並列分散エンジンを利用し、大容量データの高速処理を実現できる
–通常のSQL分析と機械学習分析のためのプラットフォームを分ける必要がない
57
VV V V
線形回帰
分類
(ロジスティック回帰)
クラスタリング
(K-means)
V
※Vertica 7.2.3時点の対応アルゴリズム
ポイント
58
In-DB Machine Learningの流れ
専用パッケージのインストールと
設定
– In-DB Machine Learningの機能はデフォルトではインストールされていないため、はじめにインストールと設定が必要
データ準備
– Verticaにデータをロード
–必要に応じて、使⽤データを正規化
分析モデルの作成
–線形回帰
–ロジスティック回帰
分析の実行
–スコアリング
– K-meansクラスタリング
評価
–スコアリングやクラスタリングの結果を評価
59
In-DB Machine Learningの流れ
専用パッケージのインストールと
設定
– In-DB Machine Learningの機能はデフォルトではインストールされていないため、はじめにインストールと設定が必要
データ準備
– Verticaにデータをロード
–必要に応じて、使⽤データを正規化
分析モデルの作成
–線形回帰
–ロジスティック回帰
分析の実行
–スコアリング
– K-meansクラスタリング
評価
–スコアリングやクラスタリングの結果を評価
60
専用パッケージのインストールと設定
前提ソフトウェア ※各Verticaノードにインストールが必要
– libgfortran
– Ident Server (oident)
60
CentOS/Red Hat 6.xの例
61
専用パッケージのインストールと設定
拡張パッケージのインストール ※任意の1ノードでdbadminで実行
61
adminTools -t install_package -d db_name -p dba_password -P AdvancedAnalytics
62
専用パッケージのインストールと設定
インストール後
– In-DB Machine Learning用の管理スキーマ「v_ml」と、分析モデル管理用のテーブル「models」が作成される
– In-DB Machine Learning を実行するために必要な権限ロール「mlrole」が作成される
62
63
専用パッケージのインストールと設定
In-DB Machine Learning を実行するユーザーの認証方法をident認証にすることが必要
– この例では、mlroleロール権限をデフォルトで持っているdbadminを使った例となっているが、専用のユーザーを作成し、「mlroleロール」権限を付与することを推奨
63
CREATE AUTHENTICATION v_ml_ident METHOD 'ident' LOCAL;
ALTER AUTHENTICATION v_ml_ident SET system_users='dbadmin';
GRANT AUTHENTICATION v_ml_ident TO dbadmin;
その他設定の詳細は、以下をご参照ください■ Assign Users to the mlrole Role and Allow Access to Advanced Analytics Functions
■ Configuring Hash and Ident Authentication
64
専用パッケージのインストールと設定
64
パスワード認証から
ident認証へ
65
In-DB Machine Learningの流れ
専用パッケージのインストールと
設定
– In-DB Machine Learningの機能はデフォルトではインストールされていないため、はじめにインストールと設定が必要
データ準備
– Verticaにデータをロード
–必要に応じて、使⽤データを正規化
分析モデルの作成
–線形回帰
–ロジスティック回帰
分析の実行
–スコアリング
– K-meansクラスタリング
評価
–スコアリングやクラスタリングの結果を評価
66
データ準備
通常どおり、Verticaにデータをロード
66
VV V V V
COPY
データが各ノードに分散配置される
67
データ準備
よりよい分析モデルを作成するための、データを正規化するSQL関数機能を提供
正規化メソッドは、以下から選択(一般的な正規化メソッド)
– MinMax
– ZScore
67
SELECT v_ml.normalize(
'インプットテーブル名'
,'インプットカラム'
,'アウトプットビュー名'
,‘正規化メソッド','--exclude_columns=インプットから除外する列名
--key_columns=アウトプットビューに表示するキー列名'
);
68
例:mtcars(自動車データのサンプル)
68
hp(総馬力)とwt(重量)の関係から分析を行うため、両列を正規化する
69
例:mtcars(自動車データのサンプル)
69
SELECT v_ml.normalize('mtcars', 'wt, hp', 'mtcars_normalized', 'MinMax',
'--exclude_columns=carName --key_columns=carName');
テーブル名 正規化対象 アウトプットビュー名 正規化メソッド
hp(総馬力)、wt(重量)それぞれを0~1の相対的な値に正規化
70
In-DB Machine Learningの流れ
専用パッケージのインストールと
設定
– In-DB Machine Learningの機能はデフォルトではインストールされていないため、はじめにインストールと設定が必要
データ準備
– Verticaにデータをロード
–必要に応じて、使⽤データを正規化
分析モデルの作成
–線形回帰
–ロジスティック回帰
分析の実行
–スコアリング
– K-meansクラスタリング
評価
–スコアリングやクラスタリングの結果を評価
71
分析モデルの作成、実行、評価
線形回帰
例: 自動車の価格予測
71
1つまたは複数の要素(説明変数/特徴量)と数値(目的変数)の関係性を学習し、
別の要素データを与えたときに、算出される数値を予測する
あらかじめ与えられた車の情報(メーカー、車種、燃料タイプ、価格等)から、別の条件での車の価格を予測する
72
分析モデルの作成、実行、評価
線形回帰(教師あり学習)
72
訓練データ テーブル
テストデータ
分析モデル
スコアリング結果
①分析モデルの作成
COPY linearReg関数 summaryLinearReg関数
②スコアリング実行
テーブル
分析モデル
predictLinearReg関数
MSE/rSquared関数
③評価
COPY
(分析モデルの確認)
73
分析モデルの作成、実行、評価
ロジスティック回帰(教師あり学習)
例: 商品のキャンペーンマーケティング
73
1つまたは複数の要素(説明変数/特徴量)と2値分類(目的変数)の関係性を学習
し、 別の要素データを与えたときに、算出される2値分類(0 or 1)を予測する
特定の商品を購入した顧客情報(年齢、性別、住所、年収、売上実績等)から、別の顧客に対して、同じ商品を購入してくれるかどうかを予測する
74
分析モデルの作成、実行、評価
ロジスティック回帰(教師あり学習)
74
訓練データ テーブル
テストデータ
分析モデル
スコアリング結果
①分析モデルの作成
COPY logisticReg関数 summaryLogisticReg関数
②スコアリング実行
テーブル
分析モデル
predictLogisticReg関数
confusionMatrix/errorRate
/liftTable/ROC関数
③評価
COPY
(分析モデルの確認)
75
分析モデルの作成、実行、評価
k-means
例: あやめ(アイリス)の分類
75
数値データの集合を類似グループに分類(クラスタリング)する
がく片や花びらの長さ・幅の情報から、類似度にしたがってグループを分け、花の種類を分類する
76
分析モデルの作成、実行、評価
k-means (教師なし学習)
76
分析データ テーブルA
分析データ分析モデル
①分析モデルの作成とクラスタリング実行
COPY kmeans関数
summaryKmeans関数
③別データへのk-means分析モデルの適用
テーブルB
分析モデル
kmeansApply関数
COPY
クラスタリング結果
②分析モデルの確認と評価
クラスタリング結果
77
例:線形回帰のサンプル mtcars
77
cyl(シリンダー数)hp(総馬力)wt(重量)
から、
mpg(燃費) <数値>
を予測する
78
例:線形回帰モデルの作成
SELECT v_ml.linearReg('linModel', 'mtcars', 'mpg', 'cyl,hp,wt',
'--exclude_columns=carName --description my_linearReg_model');
モデル名 テーブル名 目的変数となる列 説明変数となる列
79
例:線形回帰モデルの確認
79
SELECT v_ml.summaryLinearReg(USING PARAMETERS owner=‘dbadmin’, model_name='linModel');
ユーザー名 モデル名
summaryLinearReg関数や、v_mlスキーマのmodelsテーブルより、作成したモデルのサマリー情報が確認可能
80
例:線形回帰モデルの実行(スコアリング)
80
summaryLinearReg関数や、v_mlスキーマのmodelsテーブルより、作成したモデルのサマリー情報が確認可能
CREATE TABLE linPrediction as
(SELECT
carName
,mpg as observed
,v_ml.predictLinearReg(cyl,hp,wt
USING PARAMETERS model_name='linModel',
owner='dbadmin') as predicted
FROM mtcars
);
実績値
予測値
81
例:線形回帰モデルの評価
81
SELECT v_ml.rSquared(observed, predicted) OVER() FROM linPrediction;
実績値 予測値
アールスクエアによるモデル評価
1に近いほど、よい結果
8282
まとめVertica内でも、SQLを使って機械学習系の分析ができます!
In-DB Machine Learning
83
本日お伝えしたかったこと
83
ログ分析のための豊富な機能がある
分析処理が速い拡張性が高い同時実行に強い
Not Only
But Also
84
宣伝①
開催日時: 2016年7月28日(木) 16時-17時30分
会場: 日本ヒューレット・パッカード株式会社
本社2階セミナールーム (江東区大島)
セミナー内容:
HPE Vertica以下機能と概要について説明します。
1. Vertica 概要
2. Verticaアーキテクチャ詳細
a. プロジェクションとは?
b. クエリはどう実行するのか?
c. データはどのように格納されるのか?
d. データのロード方法は?
e. データはどのように削除されるのか?
f. トランザクションの考え方は?
3. データベース構築・運用イメージ
4. Q&A
Q&Aを含むインタラクティブなセッションですので、ぜひご活用ください。
84
HPE Verticaのテクニカルでディープな最新情報を気軽に体験頂く事を目的としたワークショップ「VertiCafe」定期開催しています!
次回は3回目の開催!
85
宣伝②
• イベント名 Hewlett Packard Enterprise Day 2016 大阪• 日時 2016年7月26日(火)13:00~18:30
(受付開始 12:30)• 場所 ハービスHALL(大阪・梅田)• 来場者数 250名(予定)• URL
• 主催 日本ヒューレット・パッカード株式会社• 協賛 インテル株式会社
http://www.hpe.com/jp/hpeday2016
16:55-17:40
C-1 ビッグデータ・イノベーション/事例セッション
『全行動履歴のリアルタイム分析で実現したヒト軸マーケティング』株式会社ロックオン様
2004年から提供しているAD EBiSは、WEB上のあらゆる行動を計測して
きました。近年、市場の成熟とともに個別の広告評価だけでなく、顧客(ヒト)を育てる観点での分析が求められています。『AD EBiS全行動履歴』と『列指向DB Vertica』で実現したヒト軸マーケティングについて紹介します。
HPE Day 2016 大阪でVerticaユーザー事例講演があります!