そのセグメントに対してネット広告を配信するなどです。
デジタルマーケティングの世界では、既にこうしたデータ処理の自動化が進んでおり、実際の広告配信やメール配信に活用されています。
機械学習―モデルを作って将来を予測する
デジタルマーケティングに限らず、これと同じようなデータ処理は、どのような分野にでも応用が考えられます。例えば、センサー機器から集めたデータに対して、「ここ一週間で、温度が上昇している、ビニールハウス」などといったセグメントを作り、異常がないか担当者にチェックしてもらうこともできるでしょう。
このとき問題となるのは、「どのようにセグメントを作ればよいか」が定かではないことです。温度の上昇がただちに異常を意味するとは限りません。何が異常かを決めるには、過去の経験に基づく判断が必要です。
ここでは「機械学習」を活用して、セグメントの作成を自動化することを考えましょう。例えば、実際に何か異常が発生したときに、その前後で起きていたことはデータを見ればわかります。「データ」と「異常」との関係性を一つの「モデル」として定義することさえできれば、次にまた同じようなデータが送られてきたときに、異常の発生を予測できるかもしれません。
どのデータが「異常」に繋がっているかは簡単にはわからないので、可能性のあるデータは全て列挙します。例えば、温度の絶対値が重要かもしれないし、あるいは急激な温度変化が関係しているかもしれません。そのような学習に必要なデータ(多くは数値データ)を集めて整理するところでも、ビッグデータの技術は用いられます。
データ処理の自動化―ワークフローとデータフロー
ビッグデータを活用する一つの方法として、「システムの自動化」について考えましょう。前述の例であれば、「DMPのセグメントを使ってメールを配信する」「センサー機器のデータを機械学習してモデルを作る」などといったデータ処理の自動化です。
データウェアハウスを使ったデータの集計だけでは、このような複雑なデータ処理を実現することはできません。ビッグデータを活用する自動化の技術として、ここでは「ワークフロー」と「データフロー」の考え方を説明します。
ワークフロー―タスクの実行を管理する
複雑なデータ処理は、多数の小さなタスクを組み合わせることで実現されます。メールを送りたいのであれば、まず最初に各所から集めてきたデータをストレージに格納し、それをバッチ処理で集計してメールアドレスのリストを作ります。そしてメール配送サービスのAPIを呼び出すことでメールが送られます(図2)。
図2 ワークフロー
このような一連のタスクを実行する仕組みを「ワークフロー」と呼びます。ここ数年で、ビッグデータのワークフローに最適化されたオープンソースの「ワークフロー管理ツール」がいくつも開発され、そのノウハウが広く知らるようになってきました。
ワークフローのタスクは多くのシステムに接続するため、しばしば予期せぬエラーが発生します。したがって、どのようなエラーが起きてもタスクを再実行できるような「エラーに強いワークフロー」の実装が求められます。ワークフロー管理ツールは、タスクの実行結果をデータベース等に記録することで、ワークフローの管理を容易にしてくれます。
オープンソースのデータフロー管理ツールには、表1のようなものがあります。
表1 オープンソースのワークフロー管理ツール
名称 | 開発元 |
Airflow | Airbnb |
Azkaban | LinkedIn |
Digdag | Treasure Data |
Luigi | Spotify |
Oozie | The Apache Software Foundation |
データフロー―データ処理をプログラミングする
機械学習のような複雑なデータ処理では、プログラミング言語を用いることが多くなります。機械学習では、利用するアルゴリズムに合わせて最初にデータを整形しなければならず、データの「前処理」が非常に多くなります。あちこちから集めたデータを加工し、それを一つの「学習用データ」として結合し、そして「機械学習」のライブラリを呼び出すことになります(図3)。
図3 データフロー
「Apache Spark」のような分散処理のフレームワークを用いると、複雑なデータ処理を一つのプログラムとして記述できます。本記事ではこのような分散データ処理のプログラムを「データフロー」と呼びます。
データフローのフレームワークでは、データ処理を「DAG」(Directed Acyclic Graph / 有向非巡回グラフ)と呼ばれる構造で表現します。図3の例であれば、データフローは「前処理」「学習用データ」「機械学習」の三つのノードからなるDAGとして表現され、その中をデータが流れるようにして実行されます。
前述のワークフローとは違って、データフローではメモリ上で次々とデータが受け渡されます。中間データを途中でファイルやテーブルに保存する必要がなくなるため、より効率のいいデータ処理を実現しています。
このようなデータ処理のフレームワークは、そのまま「ストリーム処理」にも応用されています。つまり、センサー機器などから送られてくるデータをただちに集計することで、異常検知のようなアルゴリズムをリアルタイムに実行することが可能となります。
データフローのフレームワークには、表2のようなものがあります。
表2 データフローのためのフレームワーク
名称 | 開発元 |
Google Cloud Dataflow | Google |
Apache Spark | The Apache Software Foundation |
Apache Flink | The Apache Software Foundation |
おわりに
従来から用いられてきた「データウェアハウス」の技術に加えて、「ワークフロー」や「データフロー」のような仕組みを組み合わせることで、ビッグデータを活用したシステムの自動化はますます発展を続けています。