Oracle Analytics Cloud (OAC) で機械学習

id:y-nakamori です。 11月8日に、Oracle Cloud Friends という オラクル主催のエンジニアイベントで LT をしてきました。 後日改めて、LT の題材として扱った Titanic の予測について考察し記事にできればと思いますが、今回は Oracle Analytics Cloud(以下、OAC)を用いて機械学習を試してみるところまでを記事にします。

前準備: 使用するデータセット

Titanic: Machine Learning from Disaster

Kaggle でチュートリアルとして扱われているタイタニック号の教師データから、生存者を予測します。 Kaggle や Titanic の詳しい説明については、他の先駆者にお任せします。 教師データ、テストデータをダウンロードし解凍します。

OAC の作成

Oracle Analytics Cloud の作成は下記記事を参照ください。

cloudii.atomitech.jp

データ・セットの作成

OAC コンソールを開いて、右上の「作成」よりデータ・セットの作成を行います。 教師データ(train.csv)とテストデータ(test.csv)、両方ともここで OAC に取り込んでおきましょう。 f:id:y-nakamori:20181109100151p:plain

前処理

右上の「作成」より、データ・フローの作成を行います。 ここでは、取り込んだデータに対して列の選択や追加編集ができますが、今回は簡単な列選択のみの学習モデルを作成していきます。

先ほど取り込んだ train.csv を追加します。 f:id:y-nakamori:20181109101229p:plain

+ボタンのステップの追加より、フローを定義していきます。 列の選択から PassengerId, Name, Ticket, Cabin の扱いが難しい(必要ない?)ため、これらの列を除去します。 f:id:y-nakamori:20181109103344p:plain 選択済みの項目が8項目になりました。

教師データを基に学習モデルの作成

8つの項目を用いて、学習モデルの作成をします。 提供されている分析モデルは複数ありますが、今回はチュートリアルで推奨されている Random Forestを採用します。

ステップの追加より、二項分類子のトレーニング, Random Forest for model trainingを選択します。 f:id:y-nakamori:20181109103858p:plain

Random Forest についてのパラメータ設定画面に移ります。 Target, Positive Class in Target はそれぞれ、予測したい列, その際の True である値を選択する項目です。 今回は生存者の予測をしたいので、Target に Survived, Positive Class in Target に 1 を入れます。 あとはデフォルトのままで進めます。 f:id:y-nakamori:20181109105136p:plain

※記事執筆時点で、Train Partition Percent(読み込んだデータのうち、何割を学習に使うか) に100を入れると、モデルが生成されません。

データ・フローの最終項のモデルの保存に名前をつけて、データ・フローの実行をします。 f:id:y-nakamori:20181109104730p:plain

データ・フローの保存を求められるので、こちらにもフローの名前を付けて保存と実行をします。 f:id:y-nakamori:20181109105031p:plain

しばらく待つとコンソールが戻ってきます。 メニューより機械学習ページに移り、先ほど指定した名前でモデルが生成されているかを確認します。 f:id:y-nakamori:20181109110051p:plain

titanic_model という名前のモデルが存在しますね。 これで、学習済みモデルの作成ができました。

生存者予測

今度はテストデータにたいして、先ほど作成した学習済みモデルを適用します。

作成より、データ・フローの作成,で test.csv を選択し追加します。 f:id:y-nakamori:20181109110446p:plain

ステップの追加でモデルの適用から、先ほど作成したモデルを選択します。 f:id:y-nakamori:20181109110652p:plain

PredictedValue が教師データの Survived に当たります。 Kaggle に提出するフォーマットが、PassengerId, Survived の二項目なので、ここで編集しておきます。 PredictedValue の列名を Survived に、ステップの追加で列を PassengerId, Survived の2つにします。

最後に、データの保存のステップを追加しデータ・フローの実行をします。 f:id:y-nakamori:20181109111130p:plain

しばらく待つとコンソールが戻ってくるので、データ・セットより予測結果を出力します。 PassengerId, Survived 共に整数で提出する必要があるので、もし異なる場合は手元で修正します。 特に出力の指定していなかった場合(できるのかは要調査)、Survived が文字列になっていて、また両項目に半角スペースが挿入されていました。

予測精度測定

Kaggle の Submitページより、結果の精度を確認してみましょう。 Kaggle: Your Home for Data Science

精度は 73% ですね! 簡単な機械学習であれば、OAC でパッと実現できました! f:id:y-nakamori:20181109112714p:plain

終わり

次回は、この精度を、OAC上で高めることにチャレンジしてみたいと思います。