648 blog

kyamanekoです。IT、思想、哲学、心理学などの記事を書いています。

Amazon MLでプログラミング不要の機械学習&簡単データ解析

f:id:kyamaneko:20160722003922p:plain

機械学習やディープラーニングというと、研究者や高度なエンジニアでなければ活用できないというイメージがあった。

しかし現在では、エクセルを使えるレベルのスキルがあれば、ディープラーニング(深層学習)によるデータマイニングを利用できる。

そこで今回は、『顧客ごとの成約率を機械学習で予測する』という例題を使って、Amazon ML(Machine Learning)による機械学習とデータ解析の方法を説明したい。

 

目次

更新履歴

2016.12.18 手順4

『または、「Amazon Machine Learning▼」のメニューから、[Datasources]→[Create a new Datasource]にアクセスする。』→『または、「Amazon Machine Learning▼」のメニューから、[ML models]→[Create a new ML models]にアクセスする。』

はじめに

Amazon ML(Machine Learning)について

aws.amazon.com

Amazon MLはAWS(Amazon Web Services - アマゾン ウェブ サービス)というクラウド・プラットフォームで利用できる、ビッグデータ解析&未来予測を行うサービスだ。

ディープラーニングを使った機械学習による類推エンジンを、極めて簡単に構築できるのが特徴だ。

現在、機械学習によるデータマイニングが可能なクラウド・サービスで主要なものは、以下の3点がある。

上記の中で、Webブラウザのみで、しかもプログラミングなしで利用できる簡単なサービスは、AWSのAmazon MLのみのようだ。(2016年7月現在)

機械学習について

機械学習とは、大量のデータを学習させ、未来予測やデータの分類を行う技術だ。
くわしくは以下の関連記事をご覧頂きたい。

www.kyamaneko.com

www.kyamaneko.com

Amazon MLの仕組み

Amazon MLによる機械学習の流れは、以下のようになる。

  1. 学習用CSVデータをAmazon S3にアップロードしておく
  2. 学習用CSVデータを読み込んで、学習モデルを作る
  3. 予測対象データをAmazon S3にアップロードしておく
  4. 機械学習モデルを使って、対象データを解析して未来予測する
  5. 予測結果CSVデータがAmazon S3に出力される
  6. エクセルなどで適宜予測結果を確認する
  7. 以降、日々発生するデータを定期的に解析する

※「Amazon S3」とは、AWSのサービスのひとつで、クラウド型のストレージサービスだ。

docs.aws.amazon.com

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

上記をダウンロードして、デスクトップなどに保存しておいて頂きたい。

 

今回のサンプルデータ(customer.csv)については、以下のような過去の成約データとなっている。

f:id:kyamaneko:20160722012451j:plain

データの内容としては、

  • 21歳-50歳男性の成約率=20%
  • 21歳-50歳女性の成約率=50%
  • 51歳-80歳男性の成約率=50%
  • 51歳-80歳女性の成約率=90%

となっている。
本来はこの分布自体が分からない状態で学習をはじめるわけだが、今回は検証用に、あらかじめ上記のデータ内容にしてある。(データベースシステムで、上記パーセンテージになるようにデータを生成した)

 

合わせて、上記のビッグデータ(1万件程度だが)の機械学習は、いわば事前準備ということになる。

本来は、『毎日新規に発生する見込み顧客を随時解析して、誰が成約率が高いかを抽出したい』というニーズが想像される。

そこで、成約結果(y)が含まれていない、解析対象データも用意した。

ダウンロード:customer-batch.csv

上記データをダウンロードして、デスクトップなどに保存しておいて頂きたい。

上記のような日々の見込み顧客を解析して、成約率を予測するのが最終目的になる。

今回の実習を行うと、以下のような予測を行うことができる。

f:id:kyamaneko:20160722003922p:plain

上記は最終的に出力されたCSVを見やすく加工したのもだ。

上記に含まれる、「score」は、成約結果(y)が1となる確率だ。つまり、score=予測成約率ということになる。

この結果を見て、「明日から成約率の高そうな見込み顧客を中心に攻めよう!」ということになる。

さて、ここから具体的な手順の説明をはじめたい。

1.AWSに登録する

まずはAWSのアカウントがないとはじまらない。

aws.amazon.comこちらを参考に登録をする。

なお、機械学習(Machine Learning)については、クレジットカードを登録しないと利用できない。参考までに、今回の記事の内容では100円程度の課金が発生した。

2.S3にデータを設置する

S3上に学習データをアップロードする。

まずS3の画面を表示したら、「バケットを作成」からデータの領域を作成する。
学習の段階では『customer.csv=学習データ』だけでいいが、ついでに「customer-batch.csv=日々発生する解析対象データ」もアップロードしておく。

f:id:kyamaneko:20160722014624p:plain

3.Machine Learningを起動する

[Machine Learning]→[Get Started]→[Launch]

f:id:kyamaneko:20160722015833p:plain

f:id:kyamaneko:20160722015331p:plain

f:id:kyamaneko:20160722015344p:plain

4.機械学習モデル(MLモデル)を作る

機械学習を終えた解析マシンとも言える、MLモデルを作成する。
MLモデルの作成は初回に行い、以降はこのMLモデルを利用して解析を行っていく。MLモデルは定期的に学習を行い、精度を高めていくのが望ましい。

上記手順からの流れで、MLモデルの作成画面にくる。

または、「Amazon Machine Learning▼」のメニューから、[ML models]→[Create a new ML model]にアクセスする。

f:id:kyamaneko:20160722020159p:plain

S3データソースから指定する。
S3 locationにS3上の「customer.csv」を指定する。
Datasource nameに「customer」を指定する。(管理用の名称なのでなんでもよい)

最後にVerifyを押す。

確認画面が表示されるので、Continueを押す。

 

次に、データの構造を指定する画面になる。

f:id:kyamaneko:20160722020940p:plain

ここでは、「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を押す。

 

次に、解析対象を選ぶ。

『Do you plan to use this dataset to create or evaluate an ML model?』という質問については、Yesを選択する。

今回は、y(成約結果)を対象に予測を行うため、yを指定して、Continueを押す。

f:id:kyamaneko:20160722021825p:plain

 

次に、『Does your data contain an identifier?』でYesを選択する。

今回はidというカラムを解析対象から除外し、管理用のid項目とする。idを指定して、Reviewを押す。続いて確認画面でContinueを押す。

f:id:kyamaneko:20160722022018p:plain

 

select training and evaluation settingは「Default (recommended)」にしたまま、Reviewを押す。(ここでCustomにすると、学習データのRecipeを設定できる)
次の画面でFinishを押す。

f:id:kyamaneko:20160722022545p:plain

 

MLモデルの詳細画面が表示される。StatusがCompletedになるまで待つ。

f:id:kyamaneko:20160722022740p:plain

 

上記がCompletedになったら、[Evaluations]→[Evaluation: ML model]→[Summary]を開く。ここも、StatusがCompletedになるまで待つ。

Completedになると、下部に解析結果が表示される。

f:id:kyamaneko:20160722022838p:plain

『ML model performance metric』の項目において、学習結果の精度が表示される。
今回は、学習精度を表す指標であるAUCが0.78となり、いちおう『good』という判定になったので、これでよしとする。

精度が低い場合は、機械学習特有のデータ加工を行う必要がある。(正規化、次元削減、特徴選択といった作業を、R言語などで行う)

5.特定データにおける成約率を予測する

「Amazon Machine Learning▼」のメニューから、[Batch Pridictions]→[Create Batch Prediction]を開く。

f:id:kyamaneko:20160722023148p:plain

 

MLモデルの一覧から、今回の「ML Model: customer」を指定して、Continueを押す。確認画面で再度Continueを押す。

f:id:kyamaneko:20160723002333p:plain

 

予測対象のデータを指定する。

f:id:kyamaneko:20160723002621p:plain

「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を押す。

f:id:kyamaneko:20160723003249p:plain

 

予測がはじまる。StatusがCompletedになるまで待つ。

f:id:kyamaneko:20160723003450p:plain

 

予測が終わったら、S3側のresultディレクトリを見に行く。
すると、一番奥に「xxxxxxxxxx-customer-batch.csv.gz」という圧縮ファイルが出力されている。

f:id:kyamaneko:20160723003633p:plain

このファイルをデスクトップなどにダウンロードする。
gz形式とは、Linux環境などで利用される圧縮ファイルだ。
Lhaplusなどのgz形式に対応したアプリケーションで展開する。

forest.watch.impress.co.jp

上記をインストール後、デスクトップアイコンにドラッグするなどして、展開できる。

 

展開した予測結果は、以下のようになっている。

f:id:kyamaneko:20160723004123p:plain

予測対象である「customer-batch.csv」に対応した、15件のデータの予測結果が出力されている。

例えば12行目は、「20011」というtagになっている。(これは、元データのid)
bestAnswerの項目は1になっている。これは、事前に指定した一定値以上のデータであるという意味だ。(今回は気にしない)
右端のscoreは、「1.980277E-1」となっている。これは指数表現というもので、要はこの場合、「0.198XXX」という数値だということになる。
この値に100を掛けた数値が、予測成約率となる。つまり、id「20011」の見込み顧客の成約率は、「およそ19.8%」ということになる。

 

上記のデータをgoogleスプレッドシートなどで読み込み、元の解析対象のデータと合わせると、以下のように見やすくできる。

f:id:kyamaneko:20160723005429p:plain

上記の中で、「一定以上の成約率が見込まれる顧客について、重点的に営業していく」ということになるだろう。

定期的に新規見込み顧客のCSVデータを、「customer-batch-20160712.csv」などとして、S3に設置して解析をかけていく。

また、元のMLモデル自体の学習を重ねることで、予測精度が向上していく。

なお、APIエンドポイントを作成して、データ個別にリアルタイム解析を行うこともできる。こうすれば、Webアプリケーションなどに連携させた予測機能を開発できる。

今回使用したリソース

以下に、今回使用したデータなどを整理しておく。

学習用の顧客データ(1万件)

ダウンロード:customer.csv

予測対象の見込み顧客データ(15件)

ダウンロード:customer-batch.csv

予測結果のデータ(15件)

ダウンロード:result.csv

見やすくした予測結果のデータ(15件)

ダウンロード:result-merged.csv

まとめ

今回は、Amazon MLを利用した、機械学習の実践方法について紹介した。
実際に使いこなすためには機械学習の理論を学ぶことが望ましいが、今回のようなレベルだったら、簡単に実践することができる

 

なお、当記事の続きとして以下もあるので、ぜひ見て頂きたい。

www.kyamaneko.com

 

さて、AWSや機械学習に触れる上で、以下のような書籍が参考になる。可能であれば入手しておきたいところ。




Amazon.co.jpアソシエイト