X

Big Data、Data Integration、Data Lakeに関するテクノロジー、製品・サービス情報、セミナー情報などをお届けします

Oracle Cloud Infrastructure Data Science のエッセンスをクイックレビュー

はじめに

皆さんは、DataScience.comと呼ばれたベンダーをご存知でしょうか。今を去ること約二年ほど前にオラクルが買収した、分析プラットフォームを提供するベンダーです。オラクルは同社買収後、約二年をかけて、このサービスをOracle Cloud Infrastructureに統合し、Oracle Lab.で開発されているAutoML APIを追加実装した新しい機械学習プラットフォームサービスとしてリリースしました。その名も ”Oracle Cloud Infrastructure Data Science”です。

本記事では、同サービスのエッセンスをクイックにご紹介します。

 

どんなサービスで何が嬉しいのか?

オールインワンの開発環境

本サービスは、Scikit-Learn、TensorFlow、Keras、XGBoostなど現在デファクトになっている機械学習ライブラリが実装済みのオールインワンの機械学習開発環境を提供するクラウドサービスです。3ステップでプロビジョニングを完了し、すぐにコーディングが始められます。

チームによる分析プロジェクトの推進、ノウハウの共有

本来、機械学習は、必要になる業務知識や技術知識が広範に及ぶことが多いため、企業内の複数部門の有識者がチームを組み、プロジェクトとして進めることが望ましいとされています。その際に必要になってくるのが、データや個人のノウハウを共有できる仕組みです。

それを実現するため、本サービスでは、複数ユーザーが開発環境を共有し、ソースコード、変換済みデータ、学習済み予測モデルを共有しながら分析プロジェクトを進めることができるプラットフォームとなっている点が大きな特徴です。

ユーザーは分析プロジェクト単位で、文字通り”プロジェクト”と呼ばれる論理的なエンティティを最初に作成します。その"プロジェクト"の中に開発環境、すなわちJupyterノートブックセッションを実行するための"セッション"を作成します。

この"セッション"はComputeインスタンスそのものになりますが、上述した機械学習ライブラリ群およびOracle独自のライブラリ"Accelerated Data Science(ADS)"が予め実装されたオールインワンのComputeインスタンスです。

複数のユーザーがこの"プロジェクト"と"セッション"の中で、成果物であるソースコード、変換済みデータ、学習済み予測モデルを共有することができるようになります。

アプリ開発担当部門、インフラ担当部門、業務担当部門などの各部門内、もしくは個人内で閉じられがちなドメインナレッジを共有し、チームによる分析プロジェクトを推進することで、より高いビジネスゴールを目指すことが可能になります。

PaaSとしては無償、IaaSのみの課金体系

本サービスはPaaSとしては無償て、IaaSのみの課金で提供されます。つまり、分析処理に必要なCompute、データ置き場としてのストレージ領域(Block Volume, NVMe Volume, Object Storage)、アウトバンドネットワーク(10TB/monthまで無償)のみの課金です。

 

Oracle Accelerated Data Science(ADS)

本サービスは、ただ単にOSSを詰め込んだだけの機械学習環境ではありません。Oracle Lab.で開発されたAuto MLライブラリ"Oracle Accelerated Data Science(ADS)"が実装されています。

ADSは、”データのローディング”から、”変換”、”モデルの構築”、”評価”、”説明”まで機械学習の全てのフェーズにおいて、高度に抽象化されたPythonライブラリを提供します。このライブラリが提供するシンプルなワークフローやメソッドにより、分析作業における生産性を大きく向上させます。

ADSが機械学習の各フェーズでどのような有効性をもたらすか、一例を見てゆきましょう。

データロード

まずはデータロードのフェーズです。ソースとなるデータストアおよびファイルフォーマットは以下のように主要なものをサポートしています。

データストア OCI Object Storage、Amazon S3、Google Cloud Storage、Azure Blob、Oracle DB、ADW、MongoDB、HDFS、NoSQL DB、Elastic Searchなど
ファイルフォーマット

CSV、TSV、Parquet、libsvm、json、Excel、HDF5、SQL、xml、Apache Server Logfile(clf, log), arffなど

 

例えば、ローカルファイルシステムからCSVファイルをロードする場合、必要なライブラリimport後、下記のようなシンプルなコードでロードします。

ds = DatasetFactory.open("/home/datascience/data.csv", target="target_column")

 

Object StorageにあるCSVファイルからデータをロードする場合も下記のようにシンプルです。

ds = DatasetFactory.open(oci://<bucket-name>/<file-name>", storage_options = {

   "config": "~/.oci/config",

   "profile": "DEFAULT_USER"

})

データの可視化

データセットを可視化することは非常に簡単です。下記一行のコードで、データを把握するための基本的な4つのパートが出来上がります。繰り返しの作業になりがちな、データ変換~データ可視化作業を、手間と時間をかけずにチャート化できます。これにより、データサイエンティストは、データからの洞察の獲得や分析シナリオの組み立てなど、本来の知的作業にフォーカスできます。

ds.show_in_notebook()

”Summary”のパートではデータセットの、行数、列数、データの種別が確認できます。

”Features”パートではカウントプロット、ボックスプロットなどにより、特徴量の値の分布に関する統計情報を一目で把握することができます。

精度の高い予測モデルを構築するためには、各特徴量の相関関係の強さを把握することが欠かせません。”Correlations"のパートでは、その強弱がヒートマップで提示され、一目で把握することができます。

”Data"のパートでは、データセットの先頭5行を表示します。特徴量の値、ラベル、クラスなどを把握することができます。

実際の分析の現場では、大量のCSVファイルを抱えていたり、対象データが複数のデータソースに分散しているケースが多いため、このように簡単にデータのアウトルックを把握できる機能は大変便利です。

データ変換

全てのデータサイエンティストが全身全霊を込めて行うデータ変換作業。分析シナリオや予測精度の良し悪しを大きく左右する非常に重要な作業です。データサイエンスの芸術的なパートと言っても過言ではありませんが、いかんせん、とても地味で骨の折れる作業です。そんな作業を少しでも軽減するためにADSはいくつかの興味深い提案をしてくれます。しかも、たった一行のコードで。

ds.get_recommendations()

データセットから、予測モデルに関係しない定数や主キー列、相関関係の強い特徴量(多重共線性)、欠損値のある特徴量、極端な値の偏りがある特徴量などを検出し、対処策を提案してくれます。しかも対処策の実行はメニューバーからの選択式で非常に簡単です。

予測モデルの構築

機械学習にかけるデータセットが出来上がれば、次にやることはもちろん、予測モデルの構築です。このパートでは様々なチャンレンジがあります。とりわけ大変なのは、このパートは付け焼刃の知識ではクオリティをあげることが非常に困難で、データサイエンティストとしての熟練度やセンスが問われるという点です。

まず、大前提として、多数の統計アルゴリズムに精通している必要があり、その中から自身の分析シナリオに最適なアルゴリズムを選択しなければいけません。しかも、最終的にできあがる予測モデルは精度の高いものである必要があります。

アルゴリズムが決まると、次はチューニングです。全てのアルゴリズムには数十個以上のハイパーパラメータが存在します。その取りえる値と組み合わせは膨大な数になりますが、そこから最適なものを選択する必要があります。

また、データ量が多ければ多いほど、予測モデルの構築処理時間は指数関数的に伸びます。合理的な時間内で予測モデルを構築するには、特徴量や値をサンプリングし、精度を確保できる必要最低限のデータ量でモデルを構築するというアプローチをがしばしば取られます。とはいえ、過度なサンプリングに起因し、重要な特徴量が抜けてしまっていたり、データ量が不足してしまったりで、結果的に予測モデルの精度が低くなってしまっては本末転倒です。

つまり、このパートは一言で言うと、”熟練の職人技”が必要ということになります。が、ADSは下記のようにわずか数行のコードで、これら職人作業を内部的に自動処理し、”いい感じ”にしてくれます。(もちろんこれ以外にも多数の作業がありADSで自動化できるのは一部です。)

# 成形済みデータセットをトレーニングデータとテストデータに分割
train, test = ds.train_test_split(test_size=0.1)

# トレーニングデータを学習しモデルを構築
ml_engine = OracleAutoMLProvider(n_jobs=-1, loglevel=logging.ERROR)
oracle_automl = AutoML(train, provider=ml_engine)
automl_model1, baseline = oracle_automl.train()

また、上述した”いい感じ”がブラックボックスにならないよう、自動処理内容をチャート化し確認することが可能です。

アルゴリズムの選択においては、候補となる各アルゴリズムの予測精度をスコアリングし、チャート化します。これにより、特定のアルゴリズムが選択された理由がわかります。

oracle_automl.visualize_algorithm_selection_trials()

ハイパーパラメータの値と組み合わせが繰り返し検証、スコアリングされ最適なセットを見つけ出す過程をチャート化します。

oracle_automl.visualize_tuning_trials()

特徴量の選択数変動によるモデルの精度がスコアリングされ、必要最低限の特徴量のセットを見つけ出す過程をチャート化します。

oracle_automl.visualize_feature_selection_trials()

 

データセットのサンプリング行数変動によるモデルの精度がスコアリングされ、必要最低限の行数を見つけ出す過程をチャート化します。

oracle_automl.visualize_adaptive_sampling_trials()

モデルの評価

出来上がった予測モデルは、通常、実ビジネスで使われる前に必ず評価されます。”このモデルはどれだけ優れているのか?"を判断する必要があるからです。

これには、モデル構築時に分割したテストデータを利用します。つまり、このテストデータで予測モデルが出す予測結果の”答え合わせをする”という考え方です。

ここでも、ADSはわずか数行のコードで処理を完結し、答え合わせの結果をチャート化してくれます。下記はバイナリ分類のモデル評価をチャート化する例です。(もちろんマルチクラスや回帰も対応しています。)

# 評価の実行
bin_evaluator = ADSEvaluator(test, models=[automl_model1, baseline], training_data=train)


# 評価結果のチャート化
bin_evaluator.show_in_notebook(perfect=True)

混合マトリクス

リフトチャート、ゲインチャート

PR曲線、ROC曲線

このように、精度確認のためのお馴染みのチャートが簡単に作成され、複数モデルの比較もできますので非常に便利です。
 

モデルカタログによるモデルの共有

出来上がったモデルはモデルカタログに登録します。モデルカタログとはプロジェクト内で構築済みモデルを共有するためめの仕組みです。登録されたモデルは一旦リリース扱いとなり、プロジェクト内のユーザーに共有されます。他のユーザーはモデルを流用することが可能ですし、そのモデルを更に強化して、再度共有することも可能です。

また、同仕組みにより、モデルに可搬性が生まれます。つまり、モデルをダウンロードし、本サービス以外の環境でそのモデルを使うことも可能になります。

大抵の機械学習ライブラリにはモデルをアーティファクトとしてエクスポート・インポートする仕組みがありますが、モデルカタログはこのアーティファクトのマネージドサービスのようなものです。

通常、モデルアーティファクトを作成するのは少々面倒ですが、下記コードで、アーティファクトのテンプレートを出力できます。

path_to_model_artifact = "/home/datascience/block_storage/model
model_artifact =model.prepare(path_to_model_artifact, force_overwrite=True)

上記のパスに作成されたモデルアーティファクトのテンプレートを、ご自身の環境に合わせて編集すればモデルカタログへの登録準備は完了です。

最後に下記のような数行のコードでモデルをモデルカタログに登録します。一見、複雑に見えますが、コードの骨格は"mode_artifact.save()"のみで、その他は単なる環境の付加情報です。

compartment_id = os.environ['NB_SESSION_COMPARTMENT_OCID
project_id = os.environ["PROJECT_OCID
mc_model = model_artifact.save(project_id=project_id, compartment_id=compartment_id, display_name="model A", description="random forest model on iris dataset", training_script_path="model_catalog.ipynb", ignore_pending_changes=True)

 

予測モデルをアプリケーションに組み込む

構築した予測モデルを Oracle Functionsにデプロイすることで、ご自身のアプリケーションに予測のしくみを簡単に取り入れることができます。また、Oracle API Gatewayを併用することで予測の関数にRESTのエンドポイントが付加され、cURLなどのREST Clientで簡単に予測を実行することができます。その実装フローは以下の図のようになります。

 

下記のようにcurlコマンドでエンドポイントに予測のためのデータ(inputの[]内のデータ)を投げると、、、

curl -X "POST" -H "Content-Type: application/json" -d '{"input":[[xxxx, xxxx, xxxx .....]]}' http://hogehoge.com:8080/invoke/xxxxx

下記のように予測結果を返してくれます。

{
    "prediction": [1.0]
}

是非オラクルクラウド上で、ご自身の開発した予測モデルを使ったサービスをアプリケーションに組み込み、全世界に向けてリリースされてはいかがでしょうか。

ここまでできて、PaaSとしては無償、IaaS課金のみでの提供です。 さあ、Oracle Cloud Infrastructure Data Scienceでデータサイエンスを加速させましょう!

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.