MongoDBを予測型のデータベースとして活用する #MongoDB #Modernization #海外事例
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本ブログは、MongoDB社のブログでMongoDB社のBenjamin Flastさん、Zoran Pandovskiさん、Natasha Seelamさんが執筆し2021年11月11日に公開された「Turning MongoDB into a Predictive Database」の日本語翻訳です。
ビジネスの世界において、人工知能(AI)や機械学習(ML)への関心が高まっています。MLやAIの予測機能を活用すれば手動での分析よりも速く、検出したパターンからさまざまなインサイトが得られます。このような効果は、収益の向上やコストの削減、イノベーションの推進に寄与することを企業は理解しています。企業はその規模にかかわらず、AIのパワーからメリットを得られますが、予測型のアナリティクスプロジェクトを導入する作業は複雑で時間のかかるものになる可能性があります。
MongoDB, Inc.(NASDAQ:MDB)とMindsDBは、機械学習のイノベーションを推進するべく、テクノロジーパートナーシップを締結しました。MongoDB, Inc.は最新の汎用データベースプラットフォームのリーディングカンパニーであり、MindsDB Inc.は自動化された機械学習の機能をデータベースに提供するオープンソースの機械学習プラットフォームを開発しています。この協業で目指しているのは、組織内のデータサイエンスチームやデータエンジニアリングチームの予測能力の最適化を強力に推進できるようにすることにあります。
最適なアプローチを確認する
最初に取り組むMLプロジェクトがすでに決まっている場合は、適切なツールと手法を選択すれば、モデルの開発、トレーニング、最適化に必要な期間を短縮できます。MLモデルをトレーニングする個々の要素を把握していないと、モデルの選択と機能のエンジニアリングに時間がかかり、作業が困難になります。さまざまなアルゴリズムを広範にテストして目的の仮設をモデル化できる点でAutoMLモデルは優れています。
現状の最新のAutoMLフレームワークが提供している手法では、学習率やバッチサイズなどのハイパーパラメーターを調整できるなど、パフォーマンスの最適化が可能です。MindsDB AutoMLフレームワークでは、最も一般的なシステムの自動化であるハイパーパラメーターのチューニングの自動化に加え、上流での自動化にも新たに対応しており、データのクリーニング、データの前処理、機能のエンジニアリングを自動化できます。透明性の高い開発を通じてユーザーを支援できるよう、このフレームワークは、説明可能性を高めるためのツールを中心に構成されており、NLP、時系列、言語モデリング、異常検知などに関する複雑なデータタイプを処理できるほか、任意のモデルをインポートして処理をカスタマイズすることも可能です。
また、MindsDBでは、データレイヤーで予測を生成することができます。これも、開発のスピードを速める重要な機能強化の1つです。MindsDBのAPIテーブルでMongoDB Atlasに直接予測を生成すると、通常のデータのように予測を利用できるようになり、予測の照会も可能です。また、開発のワークフローが簡素化されるので、開発の期間を短縮できます。
MindsDBを利用する
http://cloud.mindsdb.com からクラウド管理型のMindsDBを利用することをお勧めします。
MindsDBはオープンソースのプロジェクト(http://github.com/mindsdb/mindsdb)であるため、お使いのマシンにインストールしてローカルで実行することもできます。作業を簡単にするために、以下に説明するDockerでのインストールをお勧めします。
DockerでMindsDBをインストールする
1.はじめに、以下を実行し、Dockerがインストールされているかどうか確認します。
docker run hello-world
2.Dockerのイメージを取得するには、以下のコマンドを実行します。
docker pull mindsdb/mindsdb
3.次に以下のコマンドを実行してコンテナを起動します。
docker run -p 47334:47334 -p 47336:47336 mindsdb/mindsdb
Dockerのオプションが存在しない場合は、弊社のドキュメントに従い、MindsDBをローカルにインストールします。(https://docs.mindsdb.com/)
コネクションを設定する
MindsDBをMongoDBと接続する場合、MindsDB Studio(GUI)を使用する方法と、Mongoクライアント(端末)を使用する方法があります。現時点では、MindsDBのMongoDB APIでMongoDBにアクセスすれば、新たなデータソースとして連携機能が動作します。MongoDBとの接続の詳細については、こちらを参照してください。
MongoシェルでMindsDBのMongoDB APIに接続します。MindsDBのMongoDB APIを使用するには、Mongoシェルのバージョンが3.6以降である必要があります。MindsDB Cloudを使用している場合は、このチュートリアルのconfig.jsonに関するセクションは省略してください。
MongoDB APIを起動する前にデフォルトの構成を設定します。MindsDBのMongo APIがMongoホストになります。このAPIは、ホストキーの内部で127.0.0.1に指定されています。以下にconfig.jsonの例を示します。
{
"api": {
"http": {
"host": "127.0.0.1",
"port": "47334"
},
"mysql": {}
"mongodb": {
"host": "127.0.0.1",
"port": "47336",
"user": "mindsdb",
"password": "",
"database": "mindsdb"
}
},
"config_version": "1.4",
"debug": true,
"integrations": {},
"storage_dir": "/mindsdb_storage"
}
上記のconfig.jsonファイルの場所は、MindsDB Serverの起動時に構成ファイルの値として出力されるログの最初の行で確認できます。ホスト、デフォルトのユーザー名、パスワードを変更する場合は、このファイルに変更を加えます。以下では、GUIでMindsDBに接続する方法を説明します。
MindsDB Studioで、MindsDBとMongoDBの間にコネクションを作成し、モデルのトレーニングに使用するデータにアクセスできるようにします。任意のWebブラウザーでhttp://127.0.0.1:47334/かhttp://cloud.mindsdb.com/に接続してStudioにアクセスします。画面左のメニューから[Database Integration]を選択します。次に、[ADD DATABASE]を選択します。Databaseウィンドウに接続して以下の操作を実行します。
- サポート対象のデータベースにMongoDBを選択します。
- Mongoホスト、ポート、ユーザー名、パスワードなどの情報を追加します。
これで、MongoDBデータベースと連携できるようになりました。次に、MongoクライアントでMindsDBのMongo APIに接続し、モデルをトレーニングします。
ローカル接続でMindsDBのMongo APIに接続するには、以下を実行します。
mongo --host 127.0.0.1 -u "username" -p "password"
MindsDB Cloudを使用している場合は、ユーザー名とパスワードを入力してMindsDBのMongo APIに接続する必要があります。
mongo --host mongo.cloud.mindsdb -u "cloud_username" -p "cloud_password"
次に、MindsDBのデータベースで、以下のようにコレクションを一覧表示します。
use mindsdb
show collections
MQLで新たな機械学習モデルをトレーニングする
Mongo Query Language(MQL)とMindsDBを使用してモデルをトレーニングします。このモデルの目的は、コンクリートミックスの強度を予測することにあります。入力するカラムには、年数や、使用した水の量、コンクリートミックスの種類、強度を増すために使用した添加物の量などがあります。データセットは、Kaggleからダウンロードします。このデータセットでは、日々の建設プロジェクトで直面する可能性のあるビジネスユースケースを表現しており、使用する材料の量を最小限に抑えながら、コンクリートミックスの強度を最適化します。その目指すところは、強度を疎かにせず、コストを削減することにあります。このチュートリアルの手順では、MongoDB内のデータをそのまま使用するか、material_strengthという名前のコレクションにあるcsvファイルをインポートします。上記のデータをエクスポートしたコレクションは、こちらのURLから取得できます。
新しいモデルをトレーニングする場合は、mindsdb.predictorsコレクションでinsert()関数を呼び出す必要があります。以下の情報を含める必要ある点に注意してください。
db.predictors.insert({
'name': 'strength',
'predict': 'concrete_strength',
'connection': 'MongoIntegration',
'select_data_query':{
'database': 'test_data',
'collection': 'material_strength',
'find': {}
}
})
‘name’は、単純にモデルの名前を意味します。‘predict’は機能を表し、ここでは予測の機能になります。‘connection’は、MindsDB Studioで作成したMongoDBコネクションの名前を意味します。select_data_queryの中には、データベースの名前、コレクション、find()関数を指定します。
これらの情報を入力すると、MindsDBがトレーニングのプロセスを開始します。トレーニングが完了したかどうかを確認するには、find()コマンドを使用し、mindsdb.predictorsコレクション内のモデルの状態をチェックします。以下に例を示します。
トレーニングが正常に完了すると、‘status’: ‘complete’の通知が返されます。MindsDB Studioでは、予測の結果だけでなく、その内容を説明する有用な情報も提供されます。以下の図には、自動的に計算、表示される特性の重要度が示されています。この情報は、予測の精度を高めるうえでデータのどのカラムが重要になるのかを示しています。トレーニングを施したモデルでプレビューオプションを選択すると、MindsDB Studioから以下の情報を取得できます。
プレビューオプションではさらに、混同行列も使用できます。混同行列では、真の値と予測された値を分類してモデルのパフォーマンスを評価します。
これは回帰タスクであるため、真の値と予測された値を階層化することで、基盤となるデータのパターンを予測がどの程度有効に反映しているか分析します。パフォーマンスの高いモデルには、注目すべき対角成分があります。これは、特性と出力分布の間の関係をモデルが検出できていることを意味します。中央の斜線から離れた要素は、予測の精度が低いことを意味します。精度が低いのは、出力領域におけるデータのサンプリングがまばらであるなどの理由によるものです。次のステップでは、MQLを使用し、モデルのコレクションから予測を取得します。
モデルの照会
モデルのトレーニングが完了したら、次にモデルの照会を行います。MQLを使用している場合は、モデルのコレクションでfind()メソッドを呼び出す必要があります。また、取得しようとしている予測に関する固有の値を指定する必要もあります。以下に例を示します。
db.strength.find({'age': 28,
'superPlasticizer': 2.5, slag: 1,
'water': 162, 'fineAggregate': 1040})
MindsDBで作成したこのモデルでは、17.3の値を予測しており、confidence_intervalの上界と下界の間に90%の信頼度で真の値があるとしています。重要な情報の1つは、important_missing_informationの値です。これは、セメントの特性の値をfind()関数に含めると予測の精度が上がることを意味します。
このチュートリアルでは、MindsDBのAutoMLフレームワークでMongoDB内に予測モデルを作成する手順を重点的に説明しています。上記の例の場合、既存のコンピューティング構成を使用すれば、作業に5分もかかりません。拡張ツールを使用したり、データベースにパイプライン追加したりする必要もありません。MindsDBの予測機能をMongoDBに組み込むことで、開発者は、コストを抑えながら機械学習モデルを構築できるようになり、モデルの正確さをより詳細に把握することが可能になります。一方で、ユーザーは、データに基づくより適切な意思決定ができるようになります。