Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[db tech showcase Tokyo 2016] A13: 最新版VerticaのAnalytics機能を駆使して実現する簡単ログ分析 by日本ヒューレット・パッカード株式会社 大薗 純平

1,398 views

Published on

DWH用列指向DBMSとして、性能、拡張性、運用性に大きな強みを持つHPE Vertica。昨今、ログデータの分析をすすめる企業での採用も非常に増えてきています。本セッションでは、Verticaが備えている、ログデータ分析を行うための豊富な機能と、それぞれの活用シーンについてお話をします。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

[db tech showcase Tokyo 2016] A13: 最新版VerticaのAnalytics機能を駆使して実現する簡単ログ分析 by日本ヒューレット・パッカード株式会社 大薗 純平

  1. 1. © Copyright 2016 Hewlett Packard Enterprise Development LP. The information contained herein is subject to change without notice. 最新版Verticaの Analytics機能を駆使して 実現する簡単ログ分析 日本ヒューレット・パッカード株式会社 シニアプリセールスコンサルタント 大薗 純平 2016年7月13日
  2. 2. 2 自己紹介 –大薗純平 –日本のVerticaプリセールスリードをしています –Verticaのデータベースとしての素晴らしさに魅せられて早5年 たくさんの人にVerticaのよさを知ってもらい、使ってもらい、 抱えている悩みや不満を解消してもらうために、日々啓蒙活動中 2 ※VerticaやPostgresの生みの親であるDB研究開発者
  3. 3. 3 Verticaのコアテクノロジーおさらい • 2015年VLDB 10- Year Best Paper Awardを受賞した C-Storeがベース • 必要な列データの みの読み込み 真の列指向DB • 独立したノードを ネットワークでつな いで構成 • マルチマスター ノード構成により、 高可用性・高拡張 性を実現 MPPクラスタリング • カラムのデータ属 性に応じた最適な 圧縮アルゴリズム を適用 • I/O削減によるス ループット向上 • 物理ストレージ容 量の削減 高度な圧縮 • クエリーに最適な 圧縮、ソート、分散 が事前に実施され たデータセット • 必要なデータをよ り速く取り出すため のVertica独自の 仕組み プロジェクション
  4. 4. 4 要は 分析処理が速い 拡張性が高い 同時実行に強い
  5. 5. 5 データ量 PB 1TB 10TB 100TB 利用 ユーザー数 部門データマート POS/CRM/SCM etc 企業データウェアハウス POS/CRM/SCM etc ログ分析基盤 Web clickstream/Smart Meter/Sensor/Network monitoring etc Verticaの適用ユースケース
  6. 6. 6 本日お伝えしたいこと 6 ログ分析のための 豊富な機能がある 2016/7時点最新版 v7.2.3 分析処理が速い 拡張性が高い 同時実行に強い
  7. 7. よくある誤解①
  8. 8. 8 ログデータ(JSON等)は、 ETLツールやHadoopソリューションで 構造化してからVerticaにロードするしかない 8 ETL/Hadoopログデータ
  9. 9. 99 それももちろんOKですが… 方法はそれだけではありません!
  10. 10. 10 フレックステーブル機能を使用して、 ログを直接Verticaに取り込めます! 10 フレックス テーブル機能 ログデータ 直接取り込み ETLやMap/Reduceロジックの実装不要 DBに入れてからSQLで操作
  11. 11. よくある誤解②
  12. 12. 1212 ログ分析のロジックは、 標準SQL関数を組み合わせて作る or ユーザー定義関数を組むしかない SQL ‘99 標準 Analytic SQL – Window 関数 – 統計関数 – Geospatial関数 ユーザー定義関数 – Java – C++ – R SDKs ? ?
  13. 13. 1313 それももちろんOKですが… 便利な独自関数も使えます!
  14. 14. 1414 すぐに使えるログ分析用の SQL拡張関数が充実しています! SQL ‘99 標準 Analytic SQL – Window 関数 – 統計関数 – Geospatial関数 ユーザー定義関数 – Java – C++ – R SDKs ! ! HPE Vertica’s SQL Extensions 独自の分析用関数 – Time Series – Event Based Window – Pattern Matching
  15. 15. よくある誤解③
  16. 16. 1616 機械学習的な分析は、 データマイニングツールやR, Python, Spark/MLlib等で実装するしかない
  17. 17. 1717 それはもちろん王道ですが… VerticaならSQLでできちゃいます!
  18. 18. 1818 Vertica内でも、SQLを使って 機械学習系の分析ができます! In-DB Machine Learning
  19. 19. 19 本日のテーマ 1.フレックステーブル機能 2.ログ分析用のSQL拡張関数 3.機械学習系の分析 19
  20. 20. 20 本日のテーマ 1.フレックステーブル機能 2.ログ分析用のSQL拡張関数 3.機械学習系の分析 20
  21. 21. 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 MAP KeyValue TSV カラムナー形式 テーブル フレックス形式 hike_safety カラムナー形式 n a m e t y p e データソース ログ、センサー、ソーシャルデータ etc テーブルに蓄積したログを使用して 有効な分析パターンの発掘 2 height 分析の軸となる列を カラムナー形式に追加3 name type データを専用Parserで 解析しながらロード ※Vertica側にテーブルの 列名の事前定義は不要 1 Parse Serialize ※
  22. 22. 22 フレックステーブル機能を使ってJSONデータを取り込んでみる Tweets.json 1. JSONファイルの準備
  23. 23. 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/28uff08u6728uff0916:00-17:30 … …", : "user": { "screen_name": "jostandard", : }, : "lang": "ja" }, : ] }
  24. 24. 24 フレックステーブル機能を使ってJSONデータを取り込んでみる Tweets.json [Flex Table] Tweets 2. フレックステーブル作成 [Flex Table] Tweets_keys [Flex View] Tweets_view Tweetsテーブル作成時、以下も同時に生成 ・Tweets_keys(キー構成管理テーブル) ・Tweets_view(参照用ビュー)
  25. 25. 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. 26. 26 フレックステーブル機能を使ってJSONデータを取り込んでみる Tweets.json [Flex Table] Tweets 3. データロード [Flex Table] Tweets_keys [Flex View] Tweets_view
  27. 27. 27 3. フレックステーブルへのデータロード – データロード – データ確認(*で全項目抽出) 今回はデータがJSONなので fjsonparserを使用する COPY tweets FROM '/home/dbadmin/tweets.json' PARSER fjsonparser(start_point='statuses'); __identity__ | __raw__ --------------+-------------------------------------------------- 1 | 001000000000(005000000K000000000... 2 | 001000000000(005000000K000000000... SELECT * FROM tweets; フレックステーブルに実際に格納されているデータ = Key(連番) + Value(バイナリー)
  28. 28. 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カラムのみ
  29. 29. 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; 予め列名を知っていれば、通常テーブルのように検索できる
  30. 30. 31 フレックステーブル機能を使ってJSONデータを取り込んでみる Tweets.json [Flex Table] Tweets [Flex Table] Tweets_keys [Flex View] Tweets_view 4. キー構成更新と ビュー定義のビルド
  31. 31. 32 4. フレックステーブルのキー構成更新とビュー定義のビルド キー構成更新? ビュー定義のビルド? 最新のフレックステーブルの列名とデータ型を検知し、管理テーブルに格納 最新のフレックステーブルの列名とデータ型にて、参照用ビューを作成
  32. 32. 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;
  33. 33. 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 で取り扱われる 
  34. 34. 35 Tips: フレックステーブルのデータ型決定の精度を向上 – デフォルトでは、フレックステーブルキー更新時、すべてのデータが文字列型として認識される – DBパラメーター「EnableBetterFlexTypeGuessing」を有効化することで、文字列型だけでなく、BOOLEAN、 INTEGER、FLOAT、TIMESTAMP、DATEなど、データ内容に準じたデータ型として認識する精度が高くなる 35 compute_flextable_keys() or compute_flextable_keys_an d_build_view() Flex table: users users_keys age: varchar int created: char(10) date name: varchar SELECT SET_CONFIG_PARAMETER('EnableBetterFlexTypeGuessing',1);
  35. 35. 36 フレックステーブル機能を使ってJSONデータを取り込んでみる Tweets.json [Flex Table] Tweets [Flex Table] Tweets_keys [Flex View] Tweets_view [Flex Table] Tweets 5. カラムナー形式の列を追加
  36. 36. 37 5. フレックステーブルにカラムナー形式の列を追加 – フレックステーブルに取り込んだフィールドのうち、1つの列をカラムナー形式の列として追加 WHERE句やGROUP BY句などの検索条件キー となるような列を追加すると、性能向上に効果的 ALTER TABLE tweets ADD COLUMN "user.screen_name" varchar DEFAULT "user.screen_name"::varchar ;
  37. 37. 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');
  38. 38. 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)の詳細については、以下の資料をご参照ください マイケルストーンブレーカー発の超高速データベースで実現する分析基盤の簡単構築・運用ステップ
  39. 39. 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; プロジェクションを最適化
  40. 40. 41 まとめ フレックステーブル機能を使用して、 ログを直接Verticaに取り込めます! 41 フレックス テーブル機能 ログデータ 直接取り込み ETLやMap/Reduceロジックの実装不要 DBに入れてからSQLで操作
  41. 41. 42 本日のテーマ 1.フレックステーブル機能 2.ログ分析用のSQL拡張関数 3.機械学習系の分析 42
  42. 42. 43 Verticaの主な分析SQL機能 Vertica SQL Standard SQL-99 Conventions Vertica Extended-SQL Advanced 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 時系列 の補間 イベントの グルーピング パターン マッチング
  43. 43. 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 (たとえば、さまざまな機器から取得されるログは、 すべて同じ間隔で収集されているとは限らない)
  44. 44. 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 複数の株式銘柄の入札価格の相関関係を分析
  45. 45. 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)を補間 定数補間 複数の株式銘柄の入札価格の相関関係を分析
  46. 46. 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)を補間
  47. 47. 48 例: Time Series(時系列の補間) 定数補間 線形補間 複数の株式銘柄の入札価格の相関関係を分析 3:00:03のデータを直前3:00:00の値で補間 3:00:02, 3:00:04のデータを 3:00:00~3:00:05の間の線形値で補間
  48. 48. 49 Event Based Windows(イベントのグルーピング) できること: 時系列データにおいて、特定のイベント発生ごとにデータをグルーピングする あるユーザーの アクションの軌跡
  49. 49. 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(時間)で並び替えられたウィンドウ
  50. 50. 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秒
  51. 51. 52 Pattern Matching(パターンマッチング) できること: 一連のイベントパターンにマッチしたログを抽出 A SQL Pattern Matching (A,B+,C) Id=1 Id=2 Id=3 B B C A C A B C A Id=1 B B C Id=3 A B C
  52. 52. 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』 のパターンを定義
  53. 53. 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』 のパターンにマッチしたもののみを抽出
  54. 54. 5555 まとめ すぐに使えるログ分析用の SQL拡張関数が充実しています! SQL ‘99 標準 Analytic SQL – Window 関数 – 統計関数 – Geospatial関数 ユーザー定義関数 – Java – C++ – R SDKs ! ! HPE Vertica’s SQL Extensions 独自の分析用関数 – Time Series – Event Based Window – Pattern Matching
  55. 55. 56 本日のテーマ 1.フレックステーブル機能 2.ログ分析用のSQL拡張関数 3.機械学習系の分析 56
  56. 56. 57 Verticaで機械学習 In-DB Machine Learning – SQLで機械学習系のアルゴリズムが実行できる – Verticaの並列分散エンジンを利用し、大容量データの高速処理を実現できる – 通常のSQL分析と機械学習分析のためのプラットフォームを分ける必要がない 57 VV V V 線形回帰 分類 (ロジスティック回帰) クラスタリング (K-means) V ※Vertica 7.2.3時点の対応アルゴリズム ポイント
  57. 57. 58 In-DB Machine Learningの流れ 専用パッケージ のインストールと 設定 – In-DB Machine Learningの機 能はデフォルト ではインストー ルされていな いため、はじめ にインストール と設定が必要 データ準備 – Verticaにデー タをロード – 必要に応じて、 使⽤データを 正規化 分析モデル の作成 – 線形回帰 – ロジスティック 回帰 分析の実行 – スコアリング – K-meansクラ スタリング 評価 – スコアリングや クラスタリング の結果を評価
  58. 58. 59 In-DB Machine Learningの流れ 専用パッケージ のインストールと 設定 – In-DB Machine Learningの機 能はデフォルト ではインストー ルされていな いため、はじめ にインストール と設定が必要 データ準備 – Verticaにデー タをロード – 必要に応じて、 使⽤データを 正規化 分析モデル の作成 – 線形回帰 – ロジスティック 回帰 分析の実行 – スコアリング – K-meansクラ スタリング 評価 – スコアリングや クラスタリング の結果を評価
  59. 59. 60 専用パッケージのインストールと設定 前提ソフトウェア ※各Verticaノードにインストールが必要 – libgfortran – Ident Server (oident) 60 CentOS/Red Hat 6.xの例
  60. 60. 61 専用パッケージのインストールと設定 拡張パッケージのインストール ※任意の1ノードでdbadminで実行 61 adminTools -t install_package -d db_name -p dba_password -P AdvancedAnalytics
  61. 61. 62 専用パッケージのインストールと設定 インストール後 – In-DB Machine Learning用の管理スキーマ「v_ml」と、分析モデル管理用のテーブル「models」が作成される – In-DB Machine Learning を実行するために必要な権限ロール「mlrole」が作成される 62
  62. 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
  63. 63. 64 専用パッケージのインストールと設定 64 パスワード認証から ident認証へ
  64. 64. 65 In-DB Machine Learningの流れ 専用パッケージ のインストールと 設定 – In-DB Machine Learningの機 能はデフォルト ではインストー ルされていな いため、はじめ にインストール と設定が必要 データ準備 – Verticaにデー タをロード – 必要に応じて、 使⽤データを 正規化 分析モデル の作成 – 線形回帰 – ロジスティック 回帰 分析の実行 – スコアリング – K-meansクラ スタリング 評価 – スコアリングや クラスタリング の結果を評価
  65. 65. 66 データ準備 通常どおり、Verticaにデータをロード 66 VV V V V COPY データが各ノードに分散配置される
  66. 66. 67 データ準備 よりよい分析モデルを作成するための、データを正規化するSQL関数機能を提供 正規化メソッドは、以下から選択(一般的な正規化メソッド) – MinMax – ZScore 67 SELECT v_ml.normalize( 'インプットテーブル名' ,'インプットカラム' ,'アウトプットビュー名' ,‘正規化メソッド' ,'--exclude_columns=インプットから除外する列名 --key_columns=アウトプットビューに表示するキー列名' );
  67. 67. 68 例:mtcars(自動車データのサンプル) 68 hp(総馬力)と wt(重量)の 関係から分析を行うため、 両列を正規化する
  68. 68. 69 例:mtcars(自動車データのサンプル) 69 SELECT v_ml.normalize('mtcars', 'wt, hp', 'mtcars_normalized', 'MinMax', '--exclude_columns=carName --key_columns=carName'); テーブル名 正規化対象 アウトプットビュー名 正規化メソッド hp(総馬力)、wt(重量)それぞれを 0~1の相対的な値に正規化
  69. 69. 70 In-DB Machine Learningの流れ 専用パッケージ のインストールと 設定 – In-DB Machine Learningの機 能はデフォルト ではインストー ルされていな いため、はじめ にインストール と設定が必要 データ準備 – Verticaにデー タをロード – 必要に応じて、 使⽤データを 正規化 分析モデル の作成 – 線形回帰 – ロジスティック 回帰 分析の実行 – スコアリング – K-meansクラ スタリング 評価 – スコアリングや クラスタリング の結果を評価
  70. 70. 71 分析モデルの作成、実行、評価 線形回帰 例: 自動車の価格予測 71 1つまたは複数の要素(説明変数/特徴量)と数値(目的変数)の関係性を学習し、 別の要素データを与えたときに、算出される数値を予測する あらかじめ与えられた車の情報(メーカー、車種、燃料タイプ、価格等)から、 別の条件での車の価格を予測する
  71. 71. 72 分析モデルの作成、実行、評価 線形回帰(教師あり学習) 72 訓練データ テーブル テストデータ 分析モデル スコアリング結果 ①分析モデルの作成 COPY linearReg関数 summaryLinearReg関数 ②スコアリング実行 テーブル 分析モデル predictLinearReg関数 MSE/rSquared関数 ③評価 COPY (分析モデルの確認)
  72. 72. 73 分析モデルの作成、実行、評価 ロジスティック回帰(教師あり学習) 例: 商品のキャンペーンマーケティング 73 1つまたは複数の要素(説明変数/特徴量)と2値分類(目的変数)の関係性を学習 し、 別の要素データを与えたときに、算出される2値分類(0 or 1)を予測する 特定の商品を購入した顧客情報(年齢、性別、住所、年収、売上実績等)から、 別の顧客に対して、同じ商品を購入してくれるかどうかを予測する
  73. 73. 74 分析モデルの作成、実行、評価 ロジスティック回帰(教師あり学習) 74 訓練データ テーブル テストデータ 分析モデル スコアリング結果 ①分析モデルの作成 COPY logisticReg関数 summaryLogisticReg関数 ②スコアリング実行 テーブル 分析モデル predictLogisticReg関数 confusionMatrix/errorRate /liftTable/ROC関数 ③評価 COPY (分析モデルの確認)
  74. 74. 75 分析モデルの作成、実行、評価 k-means 例: あやめ(アイリス)の分類 75 数値データの集合を類似グループに分類(クラスタリング)する がく片や花びらの長さ・幅の情報から、類似度にしたがってグループを分け、花の種類を分類する
  75. 75. 76 分析モデルの作成、実行、評価 k-means (教師なし学習) 76 分析データ テーブルA 分析データ 分析モデル ①分析モデルの作成 とクラスタリング実行 COPY kmeans関数 summaryKmeans関数 ③別データへの k-means分析モデル の適用 テーブルB 分析モデル kmeansApply関数 COPY クラスタリング結果 ②分析モデルの確認と評価 クラスタリング結果
  76. 76. 77 例:線形回帰のサンプル mtcars 77 cyl(シリンダー数) hp(総馬力) wt(重量) から、 mpg(燃費) <数値> を予測する
  77. 77. 78 例:線形回帰モデルの作成 SELECT v_ml.linearReg('linModel', 'mtcars', 'mpg', 'cyl,hp,wt', '--exclude_columns=carName --description my_linearReg_model'); モデル名 テーブル名 目的変数となる列 説明変数となる列
  78. 78. 79 例:線形回帰モデルの確認 79 SELECT v_ml.summaryLinearReg(USING PARAMETERS owner=‘dbadmin’, model_name='linModel'); ユーザー名 モデル名 summaryLinearReg関数や、 v_mlスキーマのmodelsテーブ ルより、作成したモデルのサマ リー情報が確認可能
  79. 79. 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 ); 実績値 予測値
  80. 80. 81 例:線形回帰モデルの評価 81 SELECT v_ml.rSquared(observed, predicted) OVER() FROM linPrediction; 実績値 予測値 アールスクエアによるモデル評価 1に近いほど、よい結果
  81. 81. 8282 まとめ Vertica内でも、SQLを使って 機械学習系の分析ができます! In-DB Machine Learning
  82. 82. 83 本日お伝えしたかったこと 83 ログ分析のための 豊富な機能がある 分析処理が速い 拡張性が高い 同時実行に強い Not Only But Also
  83. 83. 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回目の開催!
  84. 84. 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ユーザー事例講演があります!
  85. 85. ご清聴 ありがとうございました! 日本ヒューレット・パッカード 大薗 純平 junpei.ozono@hpe.com

×