カスタム機械学習フレームワーク
カスタム機械学習フレームワークを使用して、ペイロード・ロギングとフィードバック・ロギングを実行したり、モデル評価のためのパフォーマンスの正確度、ランタイム・バイアス検出、説明可能性、ドリフト検出、および自動バイアス緩和機能を測定したりすることができます。 このカスタム機械学習フレームワークは、 IBM Watson Machine Learning と同等の機能を備えている必要があります。
以下のカスタム機械学習フレームワークは、モデル評価をサポートします。
| フレームワーク | 問題のタイプ | データ・タイプ |
|---|---|---|
| IBM と同等 Watson Machine Learning | 分類 | 構造化 |
| IBM と同等 Watson Machine Learning | 回帰分析 | 構造化 |
IBM や Watson Machine Learning と同等ではないモデルの場合、必要な REST API エンドポイントを公開する、そのカスタムモデル用のラッパーを作成する必要があります。 また、 Watson OpenScale と実際のカスタム機械学習エンジンとの間の入出力をつなぐ必要があります。
カスタム機械学習エンジンが最善の選択肢になる状況
カスタム機械学習エンジンは、以下の状況が当てはまるときに最善の選択肢になります。
- 現在、機械学習モデルを提供するために、すぐに利用できる製品は使用していません。 モデルにサービスを提供するシステムがあり、モデル評価のためのその機能に対する直接サポートは存在しません。
- サード・パーティー・サプライヤーから使用しているサービス・エンジンは、モデル評価用にまだサポートされていません。 この場合は、元のデプロイメントまたはネイティブ・デプロイメントに対するラッパーとして、カスタム機械学習エンジンを開発することを検討してください。
処理の流れ
以下の画像は、カスタム環境のサポートを示しています。

以下のリンクも参照できます。
モニターをサポートするためのモデルの入力基準
次の例では、モデルは特徴ベクトル(基本的には名前付きフィールドとその値の集合)を入力として受け取ります。
{ "fields": [ "name", "age", "position" ], "values": [ [ "john", 33, "engineer" ], [ "mike", 23, "student" ] ]この
“age”分野の公平性について評価することができる。入力が入力特徴量スペースから変換されたテンソルまたは行列である場合、そのモデルは評価できません。 そのため、テキスト入力またはイメージ入力を使用するディープ・ラーニング・モデルを、バイアスの検出と緩和のために処理することもできません。
さらに、説明可能性を確保するためには、トレーニングデータを読み込む必要があります。
テキストの説明性を確保するには、いずれかの特徴量がフルテキストでなければなりません。 カスタム・モデルのイメージに関する説明性は、現行リリースではサポートされていません。
モニターをサポートするためのモデルの出力基準
このモデルは、入力特徴ベクトルとともに、そのモデルにおける各クラスの予測確率を出力します。
{ "fields": [ "name", "age", "position", "prediction", "probability" ], "labels": [ "personal", "camping" ], "values": [ [ "john", 33, "engineer", "personal", [ 0.6744664422398081, 0.3255335577601919 ] ], [ "mike", 23, "student" "camping", [ 0.2794765664946941, 0.7205234335053059 ] ] ] }この例では、
"personal”と“camping”が考えられるクラスであり、各スコアリング出力のスコアが両方のクラスに割り当てられます。 予測確率が欠落している場合、バイアス検出は機能しますが、自動バイアス補正は機能しません。モデル評価のために REST API を使用して呼び出すことができるライブ・スコアリング・エンドポイントから、スコアリング出力にアクセスできます。 CUSTOMML の場合、 Amazon SageMaker, および IBM Watson Machine Learning 、 Watson OpenScale はネイティブ・スコアリング・エンドポイントに直接接続します。
カスタム機械学習エンジン
カスタム機械学習エンジンは、機械学習モデルと Web アプリケーションのインフラストラクチャーとホスティング機能を提供します。 モデル評価用にサポートされるカスタム機械学習エンジンは、以下の要件に準拠している必要があります。
次の 2 つのタイプの REST API エンドポイントを公開します。
- ディスカバリー・エンドポイント (デプロイメントと詳細の GET リスト)
- 評価エンドポイント (オンラインかつリアルタイムの評価)
すべてのエンドポイントは、サポートされる swagger の仕様に準拠している必要があります。
入力ペイロードと、デプロイメントへの出力およびデプロイメントからの出力は、仕様で説明された JSON ファイル形式に準拠している必要があります。
4.0.5 以前のバージョンの場合、 Watson OpenScale は BasicAuth または none の形式のみをサポートします。 Watson OpenScale バージョン 4.0.6 以降では、 apiKey 認証形式のサポートが追加されています。
REST API エンドポイント仕様を確認するには、 REST API を参照してください。
カスタム機械学習エンジンの追加
以下のいずれかの方法を使用して、カスタム機械学習プロバイダーと連携するようにモデル評価を構成できます。
- 構成インターフェースを使用して、最初のカスタム機械学習プロバイダーを追加できます。 詳細については、 「カスタム機械学習インスタンスの指定」 を参照してください。
- Python SDK を使用して、機械学習プロバイダーを追加することもできます。 複数のプロバイダーが必要な場合は、この方法を使用する必要があります。 詳細については、 「カスタム機械学習エンジンの追加」 を参照してください。
詳細はこちら
カスタム機械学習モニター を使用して、他のサービスと対話する方法を作成できます。
カスタム ML サービス・インスタンスの指定
モデル評価を構成するための最初のステップは、サービス・インスタンスを指定することです。 サービス・インスタンスは、AI モデルとデプロイメントの格納場所となります。
カスタム・サービス・インスタンスの接続
AI モデルと デプロイメント は、モデル評価のためにサービス・インスタンス内で接続されます。 カスタム・サービスを接続できます。 サービスを接続するには、「 構成
」タブに移動し、機械学習プロバイダーを追加して、「 編集
」アイコンをクリックします。 名前、説明、および「 プレプロダクション 」または「 プロダクション 」環境タイプの指定に加え、このタイプのサービスインスタンスに固有の以下の情報を提供する必要があります:
- ユーザー名
- パスワード
- 次のような形式を使用する
https://host:portAPIエンドポイント、例えばhttps://custom-serve-engine.example.net:8443
デプロイメントへの接続方法として、 リストをリクエストするか、個別のスコアリングエンドポイントを入力するかを選択してください。
デプロイメントのリストの要求
「デプロイメントのリストの要求」タイルを選択した場合は、資格情報と API エンドポイントを入力してから構成を保存します。
個々の評価エンドポイントの指定
「個々の評価エンドポイントの入力」タイルを選択した場合は、API エンドポイントの資格情報を入力してから構成を保存します。
これで、デプロイされたモデルを選択し、モニターを構成する準備ができました。 デプロイされたモデルは、 Insights ダッシュボードにリストされます。このダッシュボードで、 ダッシュボードに追加 をクリックできます。 監視したいデプロイメントを選択し、 「設定」 をクリックします。
詳細については、 「モニターの設定」 を参照してください。
カスタム機械学習エンジンの例
以下のアイデアを参考にして、独自の機械学習エンジンを構築してください。
Python と Flask
Python とFlaskを使用すれば、scikit-learnのモデルを提供することができます。
ドリフト検出モデルを生成するには、ノートブックで scikit-learn バージョン 0.20.2 を使用する必要があります。
このアプリは、テスト目的でローカル環境にデプロイできるほか、 IBM Cloud 上のアプリケーションとしてもデプロイできます。
Node.js
Node.js で記述されたカスタム機械学習エンジンの例は、こちらでもご覧いただけます。
エンドツーエンドのコード・パターン
コード・パターン は、カスタム・エンジン・ デプロイメント とモデル評価との統合の end2end 例を示しています。
カスタム機械学習エンジンのペイロード・ロギング
IBM 以外の Watson Machine Learning、またはカスタム機械学習エンジンでペイロードのロギングを設定するには、そのMLエンジンを「カスタム」としてバインドする必要があります。
独自の機械学習エンジンを追加する
メタデータを使用して、 Watson Machine Learning 以外のエンジンがカスタムとして追加されますが、 IBM 以外の Watson Machine Learning サービスとの直接的な連携は存在しません。 wos_client.service_providers.add メソッドを使用して、モデル評価用に複数の機械学習エンジンを追加できます。
CUSTOM_ENGINE_CREDENTIALS = {
"url": "***",
"username": "***",
"password": "***",
}
wos_client.service_providers.add(
name=SERVICE_PROVIDER_NAME,
description=SERVICE_PROVIDER_DESCRIPTION,
service_type=ServiceTypes.CUSTOM_MACHINE_LEARNING,
credentials=CustomCredentials(
url= CUSTOM_ENGINE_CREDENTIALS['url'],
username= CUSTOM_ENGINE_CREDENTIALS['username'],
password= CUSTOM_ENGINE_CREDENTIALS['password'],
),
background_mode=False
).result
次のコマンドを実行すると、サービスプロバイダを確認できます:
client.service_providers.get(service_provider_id).result.to_dict()

APIキーを使用してセキュリティを設定する
カスタム機械学習エンジンのセキュリティーを構成するには、モデル評価の認証プロバイダーとして IBM Cloud および IBM Cloud Pak for Data を使用できます。 URL https://iam.cloud.ibm.com/identity/token を使用して IBM Cloud 用の IAM トークンを生成し、 URL https://<$hostname>/icp4d-api/v1/authorize を使用して Cloud Pak for Data 用のトークンを生成できます。
以下の形式で、この POST /v1/deployments/{deployment_id}/online リクエストを使用してスコアリングAPIを実装できます:
要求
{
"input_data": [{
"fields": [
"name",
"age",
"position"
],
"values": [
[
"john",
33,
"engineer"
],
[
"mike",
23,
"student"
]
]
}]
}
応答
{
"predictions": [{
"fields": [
"name",
"age",
"position",
"prediction",
"probability"
],
"labels": [
"personal",
"camping"
],
"values": [
[
"john",
33,
"engineer",
"personal",
[
0.6744664422398081,
0.32553355776019194
]
],
[
"mike",
23,
"student",
"camping",
[
0.2794765664946941,
0.7205234335053059
]
]
]
}]
}
カスタム・サブスクリプションの追加
カスタムサブスクリプションを追加するには、次のコマンドを実行します:
custom_asset = Asset(
asset_id=asset['entity']['asset']['asset_id'],
name=asset['entity']['asset']['name'],
url = "dummy_url",
asset_type=asset['entity']['asset']['asset_type'] if 'asset_type' in asset['entity']['asset'] else 'model',
problem_type=ProblemType.MULTICLASS_CLASSIFICATION,
input_data_type=InputDataType.STRUCTURED,
)
deployment = AssetDeploymentRequest(
deployment_id=asset['metadata']['guid'],
url=asset['metadata']['url'],
name=asset['entity']['name'],
deployment_type=asset['entity']['type'],
scoring_endpoint = scoring_endpoint
)
asset_properties = AssetPropertiesRequest(
prediction_field='predicted_label',
probability_fields = ["probability"],
training_data_reference=None,
training_data_schema=None,
input_data_schema=None,
output_data_schema=output_schema,
)
result = ai_client.subscriptions.add(
data_mart_id=cls.datamart_id,
service_provider_id=cls.service_provider_id,
asset=custom_asset,
deployment=deployment,
asset_properties=asset_properties,
background_mode=False
).result
購読リストを取得するには、次のコマンドを実行してください:
subscription_id = subscription_details.metadata.id
subscription_id
details: wos_client.subscriptions.get(subscription_id).result.to_dict()
ペイロード・ロギングの有効化
サブスクリプションでペイロードのロギングを有効にするには、次のコマンドを実行してください:
request_data = {'fields': feature_columns,
'values': [[payload_values]]}
ログの詳細を確認するには、次のコマンドを実行してください:
response_data = {'fields': list(result['predictions'][0]),
'values': [list(x.values()) for x in result['predictions']]}
評価とペイロード・ロギング
モデルを評価します。
ペイロード・ロギング・テーブルに要求と応答を格納します
records_list = [PayloadRecord(request=request_data, response=response_data, response_time=response_time), PayloadRecord(request=request_data, response=response_data, response_time=response_time)] subscription.payload_logging.store(records=records_list)
Python 以外の言語では、 REST API を使用してペイロードをログに記録することもできます。