PAIでプログラミング不要の機械学習を試す！

最近PAIでの深層学習などの投稿が増えてきました、ご覧頂いていますでしょうか。それとは別に、伝統的な機械学習の場合ではどうなりますでしょうか。今回の記事は伝統的な機械学習に焦点を絞り、PAIでの機械学習の手法を紹介させて頂きたいと思います。

機械学習といえば、自前でPythonやR言語を使って、複雑なデータの前処理とか、予測モデルの学習などのイメージが多いではないでしょうか。実は世の中の沢山のパブリッククラウドサービスと同じように、機械学習のクラウドサービスを活用すると、今までの煩雑な作業が楽になれます。

さて、今回はAlibaba Cloudの機械学習プラットフォーム（PAI）について、色々内訳の便利な機能を皆さんに紹介させて頂きたいと思います。

<!--more-->

<span style="font-size: 18pt;"><strong>データセットと課題について</strong></span>

今回は公開されている有名なデータセット<a href="http://www.cs.toronto.edu/~delve/data/titanic/desc.html">「Titanic : Machine Learning from Disaster」</a>を使いました。また、class、ageとsex３つの乗客情報を特徴量として、Survived（生存したかどうか）の予測を作るのが今回の課題となります。

<table style="width: 576px;">
<tbody>
<tr>
<td style="width: 52px;">項目</td>
<td style="width: 177px;">意味</td>
<td style="width: 320px;">詳細</td>
</tr>
<tr>
<td style="width: 52px;">class</td>
<td style="width: 177px;">チケットクラス</td>
<td style="width: 320px;">1st：上層クラス（お金持ち）
2nd：中級クラス（一般階級）
3rd：下層クラス（労働階級）
crew：船員</td>
</tr>
<tr>
<td style="width: 52px;">age</td>
<td style="width: 177px;">年齢</td>
<td style="width: 320px;">adult：大人、child：子供</td>
</tr>
<tr>
<td style="width: 52px;">sex</td>
<td style="width: 177px;">性別</td>
<td style="width: 320px;">male：男性、female：女性</td>
</tr>
<tr>
<td style="width: 52px;">survived</td>
<td style="width: 177px;">生存したかどうか</td>
<td style="width: 320px;"> 0：死亡、1：生存</td>
</tr>
</tbody>
</table>
<img class="alignnone wp-image-3527" src="https://techblog.sbcloud.co.jp/assets/2018/09/スクリーンショット-2018-09-13-17.38.18.png" alt="" width="566" height="305" />

<span style="font-size: 18pt;"><b>実験の構成図</b></span>

今回の実験は主にデータのインポート、統計解析、モデルのトレーニングと予測、モデルの評価と分析、4つの部分で構成されています。それぞれの詳細を順番で説明していきたいと思います。

<img class="alignnone size-full wp-image-3622" src="https://techblog.sbcloud.co.jp/assets/2018/09/2323-2.png" alt="" width="1500" height="500" />
<ul style="list-style-type: square;">
<li><span style="font-size: 14pt;"><strong>Step 1: データのインポート</strong></span></li></ul>
今回のデータソースは、下図のように、Alibaba Cloudビッグデータ系の主力なクラウドプロダクトMaxComputeからデータセットを読み込むとの形でインポートしましたが、実はMaxCompute以外にも、OSSやRDSからのデータ同期とのアプローチもサポートしていますので、PAIと各プロダクト密接な連携により、データセットのインポートがとても便利になります。PAIのリリース後に、皆さんぜひ試してみてください。

<img class="alignnone size-full wp-image-3537" src="https://techblog.sbcloud.co.jp/assets/2018/09/図1.png" alt="" width="1724" height="180" />
<ul style="list-style-type: square;">
<li><span style="font-size: 14pt;"><strong>Step 2: 統計解析</strong></span></li>
</ul><strong>① 離散値特徴解析（Discrete Value Feature Analysis）</strong>

データセットの特徴量が全て離散値のため、「離散値特徴解析」とのコンポネートを使いました。下図のように、「Feature Column」にclass、age、sexを選択して、「Label Column」にsurvivedを指定してください。そうすると、class、age、sex、それぞれの属性でsurvived（即ち、生存したかどうか）を解析することができます。

<img class="alignnone size-full wp-image-3553" src="https://techblog.sbcloud.co.jp/assets/2018/09/4.png" alt="" width="1727" height="180" />

「離散値特徴解析」コンポネートを右クリックして、「View Analytics Report」との項目をクリックすると、下図のように、class、age、sex、それぞれの解析結果が直ちに出てきます。

<img class="alignnone size-full wp-image-3560" src="https://techblog.sbcloud.co.jp/assets/2018/09/888.png" alt="" width="1906" height="180" />

<strong>② フィルタリングとマッピング（Filtering and Mapping）</strong>

もし例えば、子供の生存状況に気になるならば、「フィルタリングとマッピング」とのコンポネートを使えます。下図のように、「Mapping Rules」でsex、class、survivedを選択して、「Filter Conditions」に age='child' を設定するだけで完了となります。

そして、「フィルタリングとマッピング」を右クリックして、「View Data」との項目をクリックすると、子供の生存状況の一覧情報をその場で確認することができます。

<img class="alignnone size-full wp-image-3562" src="https://techblog.sbcloud.co.jp/assets/2018/09/9999.png" alt="" width="1862" height="180" />

<img class="alignnone size-full wp-image-3563" src="https://techblog.sbcloud.co.jp/assets/2018/09/スクリーンショット-2018-09-19-11.31.00.png" alt="" width="2242" height="300" />
<ul style="list-style-type: square;">
 	<li><span style="font-size: 14pt;"><strong>Step 3: モデルのトレーニングと予測</strong></span></li>
</ul>
今回使っていたアルゴリズムは「Naive Bayes」と「Random Forest」２つでした。それぞれ予測モデルを作って、モデルの評価を行って、最善のモデルを選出するのは目的となります。

まず、トレーニングを行う前に、「Split」コンポネートの「Split by Ratio」というシンプルなホールドアウト手法を使って、データセットをトレーニングデータセットとテストデータセットを分割します。（分割する時の「Random Seed」も指定することができます。）

次は、「Naive Bayes」と「Random Forest」の詳細設定の中に,　それぞれclass、age、sexを３つの特徴量として「Feature Column」を指定し、survivedを「Label Column」として設定します。

最後、「Prediction_1」と「Prediction_2」の「Reserved Output Column」設定項目に、survivedを含めて、全て4つのフィールドを選択してください。他の項目設定はデフォルトのままで大丈夫です。

先に述べた全てのコンポネートの詳細設定は下記のようになります。

<img class="alignnone size-full wp-image-3628" src="https://techblog.sbcloud.co.jp/assets/2018/09/3434.png" alt="" width="900" height="620" />

<ul style="list-style-type: square;">
<li><span style="font-size: 14pt;"><strong>Step 4: モデルの評価と分析</strong></span></li>
</ul>
<strong style="font-size: 1rem;">バイナリ分類評価（Binary Classification Evaluation）</strong>

生存したかどうかは、バイナリ分類領域に属しているので、「バイナリ分類評価」とのコンポネートを使いました。先ほど述べた統計解析コンポネートと同じように、「バイナリ分類評価」を右クリックして、「View Evaluation Report」との項目をクリックすると、下図のように、ROC曲線やPR曲線などの評価指標が直ちに出てこられます。

<table class=" aligncenter alignleft" style="width: 579px;">
<tbody>
<tr>
<td style="width: 243px;"></td>
<td style="width: 243px;">Naive Bayes</td>
<td style="width: 320px;">Random Forest</td>
</tr>
<tr>
<td style="width: 243px;">       AUC Score</td>
<td style="width: 243px;">0.7341</td>
<td style="width: 320px;">0.7564</td>
</tr>
<tr>
<td style="width: 243px;">          F1 Score</td>
<td style="width: 243px;">0.6259</td>
<td style="width: 320px;">0.6319</td>
</tr>
</tbody>
</table>
<img class="alignnone size-full wp-image-3631" src="https://techblog.sbcloud.co.jp/assets/2018/09/5656.png" alt="" width="1945" height="500" />

<span style="font-size: 18pt;"><strong>最後</strong></span>

皆さん、いかがでしょうか、上述のようにPAI内臓のコンポネートを活用することだけで、ソースコードを書かずに、機械学習を一通りに実施することができました。PAIリリース後には、皆さんぜひ体験してみてください。