機械学習やディープラーニングというと、研究者や高度なエンジニアでなければ活用できないというイメージがあった。
しかし現在では、エクセルを使えるレベルのスキルがあれば、ディープラーニング(深層学習)によるデータマイニングを利用できる。
そこで今回は、『顧客ごとの成約率を機械学習で予測する』という例題を使って、Amazon ML(Machine Learning)による機械学習とデータ解析の方法を説明したい。
目次
はじめに
Amazon ML(Machine Learning)について
Amazon MLはAWS(Amazon Web Services - アマゾン ウェブ サービス)というクラウド・プラットフォームで利用できる、ビッグデータ解析&未来予測を行うサービスだ。
ディープラーニングを使った機械学習による類推エンジンを、極めて簡単に構築できるのが特徴だ。
現在、機械学習によるデータマイニングが可能なクラウド・サービスで主要なものは、以下の3点がある。
上記の中で、Webブラウザのみで、しかもプログラミングなしで利用できる簡単なサービスは、AWSのAmazon MLのみのようだ。(2016年7月現在)
機械学習について
機械学習とは、大量のデータを学習させ、未来予測やデータの分類を行う技術だ。
くわしくは以下の関連記事をご覧頂きたい。
Amazon MLの仕組み
Amazon MLによる機械学習の流れは、以下のようになる。
- 学習用CSVデータをAmazon S3にアップロードしておく
- 学習用CSVデータを読み込んで、学習モデルを作る
- 予測対象データをAmazon S3にアップロードしておく
- 機械学習モデルを使って、対象データを解析して未来予測する
- 予測結果CSVデータがAmazon S3に出力される
- エクセルなどで適宜予測結果を確認する
- 以降、日々発生するデータを定期的に解析する
※「Amazon S3」とは、AWSのサービスのひとつで、クラウド型のストレージサービスだ。
Amazon MLによる簡単ディープラーニング実践
それでは早速、実際の手順を説明していきたい。
なお、以下の公式チュートリアルも分かりやすいので、当記事と合わせて試してみてもいいだろう。
Tutorial: Using Amazon ML to Predict Responses to a Marketing Offer - Amazon Machine Learning
今回の例題
ある営業会社での利用を想定し、
『CSV形式の顧客データを機械学習して、新規の見込み顧客が成約まで至る確率を予測する』
という例題とする。
CSVデータの形式は以下のようなものにする。
"id","age","sex","y"
"1","68","1","1"
"2","26","2","0"
"3","22","2","0"
"4","70","2","1"
id: 管理用の顧客id
age: 顧客の年齢
sex: 性別(1-男、2-女)
y: 成約したかどうか(1-成約、0-無成約)
このような過去のデータを大量に機械学習させ、新たな見込み顧客が成約に至るかどうかを予測するモデルを作っていくのだ。
なお、今回学習データとして使うCSVデータは、以下よりダウンロードできる。
上記をダウンロードして、デスクトップなどに保存しておいて頂きたい。
今回のサンプルデータ(customer.csv)については、以下のような過去の成約データとなっている。
データの内容としては、
- 21歳-50歳男性の成約率=20%
- 21歳-50歳女性の成約率=50%
- 51歳-80歳男性の成約率=50%
- 51歳-80歳女性の成約率=90%
となっている。
本来はこの分布自体が分からない状態で学習をはじめるわけだが、今回は検証用に、あらかじめ上記のデータ内容にしてある。(データベースシステムで、上記パーセンテージになるようにデータを生成した)
合わせて、上記のビッグデータ(1万件程度だが)の機械学習は、いわば事前準備ということになる。
本来は、『毎日新規に発生する見込み顧客を随時解析して、誰が成約率が高いかを抽出したい』というニーズが想像される。
そこで、成約結果(y)が含まれていない、解析対象データも用意した。
上記データをダウンロードして、デスクトップなどに保存しておいて頂きたい。
上記のような日々の見込み顧客を解析して、成約率を予測するのが最終目的になる。
今回の実習を行うと、以下のような予測を行うことができる。
上記は最終的に出力されたCSVを見やすく加工したのもだ。
上記に含まれる、「score」は、成約結果(y)が1となる確率だ。つまり、score=予測成約率ということになる。
この結果を見て、「明日から成約率の高そうな見込み顧客を中心に攻めよう!」ということになる。
さて、ここから具体的な手順の説明をはじめたい。
1.AWSに登録する
まずはAWSのアカウントがないとはじまらない。
aws.amazon.comこちらを参考に登録をする。
なお、機械学習(Machine Learning)については、クレジットカードを登録しないと利用できない。参考までに、今回の記事の内容では100円程度の課金が発生した。
2.S3にデータを設置する
S3上に学習データをアップロードする。
まずS3の画面を表示したら、「バケットを作成」からデータの領域を作成する。
学習の段階では『customer.csv=学習データ』だけでいいが、ついでに「customer-batch.csv=日々発生する解析対象データ」もアップロードしておく。
2.Machine Learningを起動する
[Machine Learning]→[Get Started]→[Launch]
3.機械学習モデル(MLモデル)を作る
機械学習を終えた解析マシンとも言える、MLモデルを作成する。
MLモデルの作成は初回に行い、以降はこのMLモデルを利用して解析を行っていく。MLモデルは定期的に学習を行い、精度を高めていくのが望ましい。
上記手順からの流れで、MLモデルの作成画面にくる。
または、「Amazon Machine Learning▼」のメニューから、[Datasources]→[Create a new Datasource]にアクセスする。
S3データソースから指定する。
S3 locationにS3上の「customer.csv」を指定する。
Datasource nameに「customer」を指定する。(管理用の名称なのでなんでもよい)
最後にVerifyを押す。
確認画面が表示されるので、Continueを押す。
次に、データの構造を指定する画面になる。
ここでは、「Does the first line in your CSV contain the column name?(1行目にカラム名があるCSVか)」をyesにする。
各項目については、
id: Numeric
age: Numeric
sex: Categorical
y: Binary
にする。
それぞれの項目は、以下のような意味になる。
Numeric(回帰分析。年齢や温度や気温や価格など境界のないデータ)
Categorical(多項分類。性別や血液型など、境界のあるデータ)
Binary(Yes/Noの二項分類)
Continueを押す。
次に、解析対象を選ぶ。
今回は、y(成約結果)を対象に予測を行うため、yを指定して、Continueを押す。
次に、行番号(id)のカラムを指定する。
今回はidというカラムを解析対象から除外し、管理用のid項目とする。idを指定して、Reviewを押す。続いて確認画面でContinueを押す。
select training and evaluation settingは「Default (recommended)」にしたまま、Reviewを押す。(ここでCustomにすると、機械学習の専門的なパラメータを変更できる)
次の画面でFinishを押す。
MLモデルの詳細画面が表示される。StatusがCompletedになるまで待つ。
上記がCompletedになったら、[Evaluations]→[Evaluation: ML model]→[Summary]を開く。ここも、StatusがCompletedになるまで待つ。
Completedになると、下部に解析結果が表示される。
4.特定データにおける成約率を予測する
「Amazon Machine Learning▼」のメニューから、[Batch Pridictions]→[Create Batch Prediction]を開く。
MLモデルの一覧から、今回の「ML Model: customer」を指定して、Continueを押す。確認画面で再度Continueを押す。
予測対象のデータを指定する。
「My data is in S3..」を選択する。
Datasource nameはcustomer-batchにする。
S3 locationはcustomer-batch.csvを指定する。
Does the first line in your CSV...はYesにする。(最初の行がカラム名なので)
上記を指定して、Verifyを押す。
次の画面でContinueを押す。
予測結果の出力先を指定する画面になる。
予測結果についてはCSV形式でS3上に出力されるため、そのパスを指定する。
ここでは、バケット直下の「result」というディレクトリを指定して、Reviewを押す。
予測がはじまる。StatusがCompletedになるまで待つ。
予測が終わったら、S3側のresultディレクトリを見に行く。
すると、一番奥に「xxxxxxxxxx-customer-batch.csv.gz」という圧縮ファイルが出力されている。
このファイルをデスクトップなどにダウンロードする。
gz形式とは、Linux環境などで利用される圧縮ファイルだ。
Lhaplusなどのgz形式に対応したアプリケーションで展開する。
上記をインストール後、デスクトップアイコンにドラッグするなどして、展開できる。
展開した予測結果は、以下のようになっている。
予測対象である「customer-batch.csv」に対応した、15件のデータの予測結果が出力されている。
例えば12行目は、「20011」というtagになっている。(これは、元データのid)
bestAnswerの項目は1になっている。これは、事前に指定した一定値以上のデータであるという意味だ。(今回は気にしない)
右端のscoreは、「1.980277E-1」となっている。これは指数表現というもので、要はこの場合、「0.198XXX」という数値だということになる。
この値に100を掛けた数値が、予測成約率となる。つまり、id「20011」の見込み顧客の成約率は、「およそ19.8%」ということになる。
上記のデータをgoogleスプレッドシートなどで読み込み、元の解析対象のデータと合わせると、以下のように見やすくできる。
上記の中で、「一定以上の成約率が見込まれる顧客について、重点的に営業していく」ということになるだろう。
定期的に新規見込み顧客のCSVデータを、「customer-batch-20160712.csv」などとして、S3に設置して解析をかけていく。
また、元のMLモデル自体の学習を重ねることで、予測精度が向上していく。
なお、APIエンドポイントを作成して、データ個別にリアルタイム解析を行うこともできる。こうすれば、Webアプリケーションなどに連携させた予測機能を開発できる。
今回使用したリソース
以下に、今回使用したデータなどを整理しておく。
学習用の顧客データ(1万件)
予測対象の見込み顧客データ(15件)
予測結果のデータ(15件)
見やすくした予測結果のデータ(15件)
まとめ
今回は、Amazon MLを利用した、機械学習の実践方法について紹介した。
実際に使いこなすためには機械学習の理論を学ぶことが望ましいが、今回のようなレベルだったら、簡単に実践することができる。
さて、AWSや機械学習に触れる上で、以下のような書籍が参考になる。可能であれば入手しておきたいところ。