Watson Studio上のJupyter Notebookでモデルをビルドする
Introduction¶
このチュートリアルでは、IBM® Watson™ Studio 内から Jupyter Notebooks をセットアップして実行する方法を説明します。まず、Kaggleで提供されている顧客の解約に関するデータセットを使用します。このデータセットには、対応するCustomer Churn Analysis Jupyter Notebook(元々はSandip Dattaが開発したもので、以下のような本質的なステップを経て、機械学習モデルを開発する際の典型的な手順を示しています。
-
データセットをインポートする。
-
データの可視化や基本的な統計パラメータ(平均値や標準偏差など)を確認し、データを分析します。
-
機械モデル構築のためにデータを準備する(カテゴライズされた特徴を数値特徴に変換したり、データを正規化したりするなど)。
-
データを学習データとテストデータに分割し、モデルの学習とモデルの検証に使用する。
-
様々な機械学習アルゴリズムを用いてモデルを学習し、二値分類を行う。
-
混同行列を使って、様々なモデルの精度と正確さを評価する。
-
与えられたデータセットに最も適合するモデルを選択し、予測の結果にどの特徴が低くかつ大きな影響を与えるかを分析する。
-
Watson Machine Learning を使用してモデルを保存・展開し、ノートブックの外からもアクセスできるようにします。 ノートブックの外からアクセスできるようにします。
ノートブックは 40 個の Python セルで定義されており、使用する主なライブラリに精通している必要があります。機械学習用の Python scikit-learn、科学計算用の Python numpy、Python pandasでデータ構造の管理と分析を行い、データの可視化のためにmatplotlibとseabornを使用しています。
前提条件¶
このラーニングパスのチュートリアルを完了するには、IBM Cloud アカウントが必要です。このアカウントでは、IBM Cloud、IBM Watson Studio、IBM Watson Machine Learning Serviceへのアクセスが可能になります。
見積もり時間¶
このチュートリアルを完了するには、約 30 分かかります。
手順¶
ラーニングパスのために環境をセットアップする手順は、Data visualization, preparation, and transformation using IBM Watson Studioチュートリアルで説明されています。これらのステップは、以下の方法を示しています。
- IBM Cloud Object Storage サービスを作成します。
- IBM Watson Studio プロジェクトを作成します。
- IBM Cloud サービスをプロビジョニングします。
- データセットをアップロードします。
学習パスを続行する前に、これらのステップを完了する必要があります。環境のセットアップが完了している場合は、次のステップであるノートブックの作成に進みます。
NOTE:ノートブックを実行するには、Watson Machine Learning サービスが必要です。
以下の Jupyter ノートブックを実行するには、まず、Watson Machine Learning サービスにアクセスするための API キーを作成し、モデルをデプロイするためのデプロイメントスペースを作成する必要があります。
API キーの作成¶
-
Watson Machine Learning サービスにアクセスするために、IBM Cloud コンソールから API キーを作成します。メイン・ダッシュボードから「Manage」メニュー・オプションをクリックし、「Access (IAM)」を選択します。
-
Create an IBM Cloud API keyをクリックします。キーの名前を入力して、Createをクリックします。
-
APIキーは、ノートブックを実行する際に必要となるため、コピーしてください。
important:生成されたAPIキーは一時的なもので、数分後には消えてしまいますので、ノートブックにインポートする必要があるときのために、値をコピーして保存しておくことが重要です。
また、Watson Machine Learning サービスの場所を決定する必要があります。これを決定する 1 つの方法は、IBM Cloud ダッシュボードのリソースリストからサービスをクリックすることです。「Manage」から「Details」をクリックします。
このケースでは、サービスはダラスにあり、これは US-South リージョンに相当します。
NOTE:現在のリージョンは、au-syd、in-che、jp-osa、jp-tok、kr-seo、eu-de、eu-gb、ca-tor、us-south、us-east、br-saoです。
デプロイメントスペースの作成¶
モデルをノートブックにデプロイする際には、デプロイメントスペースが必要です。デプロイメントスペースを作成するには、Watson Studio メニューの Deployments メニューから View all spaces を選択します。
NOTE。以下のスクリーンショットには、"IBM Watson Studio" ではなく "IBM Cloud Pak for Data" というバナーが表示されていることに気づくかもしれません。このバナーは、IBM Cloud アカウントで作成したサービスの数に依存しています。ある閾値に達すると、バナーは「IBM Cloud Pak for Data」に切り替わります。
-
[New Deployment Space +] をクリックして、デプロイメント スペースを作成します。
をクリックします。
-
ストレージと機械学習サービスがスペースに割り当てられていることを確認します。
-
スペースが作成されたら、ManageタブをクリックしてSpace GUIDを表示します。この値は、ノートブックにインポートする必要があります。
ノートブックの作成¶
顧客の解約を予測するためのJupyterノートブックを作成し、プロジェクトにアップロードしたデータセットを使用するように変更します。
-
Assetタブで、Add to Projectをクリックします。
-
アセットタイプとして Notebook を選択します。
-
「New Notebook」のページで、ノートブックを以下のように設定します。
-
「From URL」タブを選択します。
2.ノートブックの名前を入力します(例:「customer-churn-kaggle」)。
3.3. Python 3.7 ランタイムシステムを選択します。
4.ノートブックのURLを以下のように入力します。
-
「 5.Create」をクリックします。これにより、IBM Watson Studio 内でノートブックの読み込みと実行が開始されます。
ノートブックの実行¶
ノートブックのページが表示されます。
ノートブックが開かれていない場合は、プロジェクトのアセットページでノートブックの横に表示されている[編集]アイコンをクリックすると、ノートブックを起動できます。
NOTE:ノートブックの実行手順に問題がある場合は、出力付きの完成したノートブックを以下の URL で参照できます。https://github.com/IBM/watson-studio-learning-path-assets/blob/master/examples/customer-churn-kaggle-with-output.ipynb。
ノートブックのページから、以下の変更を行います。
-
3つ目のセルまでスクロールして、セルの中央にある空の行を選択します。まだ開いていない場合は、ページ上部にある「1001データ」アイコンをクリックして「ファイル」サブパネルを開きます。
-
ページの右側の部分で、Customer Churnデータセットを選択します。Insert to codeをクリックし、pandas DataFrameを選択します。これにより、データセットをpandas DataFrameに読み込むためのコードがデータセルに追加されます。
-
生成されたデータフレームの変数名を、ノートブックの残りの部分で使用される df に割り当てます。ノートブックに表示すると、データフレームは以下のように表示されます。
-
File > Saveを選択し、ノートブックを保存します。
ノートブックのセルを1つずつ実行して、その効果とノートブックの定義を確認します。
ノートブック実行の背景¶
ノートブックが実行されると、ノートブック内の各コードセルが上から下に向かって順に実行されます。
各コードセルは選択可能で、その前には左マージンにタグが表示されます。タグの形式はIn [x]:
です。ノートブックの状態によっては、x
が
- 空白:そのセルが一度も実行されていないことを示します。
- このコードステップが実行された相対的な順序を表す数字。
- セルが実行されていることを示す
*
です。
ノートブックのコードセルを実行するには、いくつかの方法があります。
- セルを 1 つずつ実行する。セルを選択して、ツールバーの Play を押してください。
- バッチモードで連続して実行する。Cell メニューでは、いくつかのオプションが用意されています。例えば、ノートブック内のすべてのセルを実行する
Run All
や、現在選択されているセルの下の最初のセルから実行を開始し、それに続くすべてのセルを継続して実行するRun All Below
などがあります。 - スケジュールされた時間に。ノートブックページの右上にある「Schedule」ボタンを押してください。ここでは、ノートブックを将来のある時点で1回だけ実行する、または指定した間隔で繰り返し実行するようにスケジュールすることができます。
データの理解と可視化¶
データ理解のフェーズでは、最初のデータセットを収集します。このフェーズでは、データに慣れ親しみ、データ品質の問題を特定し、データに関する最初の洞察を発見するための活動が行われます。Jupyter Notebookでは、これらの活動はpandasとpandasの具現化されたmatplotlib
関数を使って行われます。pandasのdescribe
関数は特徴量の記述統計を生成し、plot
関数はデータの分布を示す図を生成するのに使用されます。
データの準備¶
データの準備段階では、機械学習サービスに投入する最終的なデータセットを構築するために必要なすべての活動が対象となります。データの準備作業は複数回行われることが多く、決まった順序ではありません。タスクには、テーブル、レコード、属性の選択や、モデリングツール用のデータの変換とクレンジングが含まれます。Jupyter Notebookでは、カテゴライズされた特徴を数値に変換したり、特徴を正規化したり、予測に関係のない列(顧客の電話番号など)を削除したりします。次の画像は、操作のサブセットを示しています。
モデリングと評価¶
モデリングの段階では、最適な予測を実現するために、様々なモデリング手法を選択・適用し、そのパラメータを調整します。一般的に、適用可能な技術は複数あり、技術によってはデータの形式に特定の要件があります。そのため、データの準備段階に戻る必要があることも多い。しかし、モデルの評価段階では、データ分析の観点から質の高いモデルを構築することが目標となります。モデルの最終的な展開に進む前に、モデルを徹底的に評価し、モデルを作成するために実行されたステップを見直し、モデルがビジネス目標を適切に達成していることを確認することが重要です。
Jupyter Notebookでは、データセットをトレーニング用とテスト用に分割し(層別クロスバリデーションを使用)、GradientBoostingClassifier
、サポートベクターマシン、ランダムフォレスト、K-Nearest Neighborsなどの明確な分類アルゴリズムを使用して複数のモデルをトレーニングしました。
このステップに続いて、各アルゴリズムの混同行列を印刷して、モデルの精度と正確さをより詳細に確認します。
Watson Machine Learning にモデルをデプロイする¶
ノートブックの最後のセクションでは、モデルを保存して Watson Machine Learning サービスにデプロイします。
前のステップでは、Watson Machine Learning サービスに接続するために使用する API キーを作成しました。Watson Machine Learning サービスの使用を承認するために、API キーと場所をコピーします。
モデルをデプロイするには、使用するデプロイメントスペースを定義する必要があります。先に作成した デプロイメントスペース ID をコピーします。
モデルが保存され、Watson Machine Learning にデプロイされると、さまざまな方法でモデルにアクセスできるようになります。
Jupyter ノートブックでは、モデルのスコアリングエンドポイントにデータを渡してテストすることができます。
Watson Studio コンソールに戻ると、Deployment Space の Assets タブで、Models セクションに新しいモデルが表示されていることがわかります。
Deploymentsタブをクリックすると、モデルが正常にデプロイされたことがわかります。
デプロイをクリックすると、詳細が表示されます。API referenceタブをクリックすると、scoringエンドポイントが表示されます。Code Snippetsセクションでは、プログラムでscoringエンドポイントにアクセスする方法の例を見ることができます。
Testタブでは、モデルをスコアリングするためのスコアリングペイロードJSONオブジェクトを渡すことができます(ノートブックで行ったことと同様です)。データを入力した後、Predictを押してモデルをスコアリングします。
ここでは、入力データ本体に入力された値を示します。