今回は「オペレーショナル・アナリティクス for Data Scientist」をメインテーマとしてご紹介します。企業で分析業務を行うデータサイエンティストの皆様はご存知の通り、モデルは開発しただけでは意味がありません。そのモデルを業務に実装(デプロイ)してはじめて、ビジネス課題を解決し、価値を創出することができるわけです。SASが長年蓄積してきたナレッジをご覧ください。 1.Using SAS® Viya® to Implement Custom SAS® Analytics in Python: A Cybersecurity Example この論文は、SASの分析機能により支えられているプロダクションレベルのアナリティクスソリューションを開発しようとしているデータサイエンティストを対象としています。本文では、SAS ViyaとCloud Analytics Service(CAS)に基づく、CASの構築基盤とサイバーセキュリティを説明します。そして、SASアナリティクスを本番環境でPythonで実装する方法を説明します。 2.What’s New in FCMP for SAS 9.4 and SAS Viya この論文では、下記いくつかポイントをメインとして議論していきます。まず、SASが提供しているFunctionコンパイラー(FCMP)の新しい特徴を紹介し、それから主にFCMPアクションセットを中心とし、リアルタイムアナリティクススコアリングコンテナ(ASTORE)とPythonのインテグレーションについても説明します。それらの説明により、SASの新しいテクノロジーに対し、更なる理解を頂けることを期待しています。 3.Influencer Marketing Analytics using SAS® Viya® この論文はSAS Viyaを使って、マーケティングアナリティクスを行う事例を紹介します。近来、マーケティングはますますインフルエンサーが大きな役割をしめるようになってきています。それらのインフルエンサーたちはソーシャルメディアのコンテンツ作成者であり、多くのフォロワーを持ち、人々の意見に影響を与え、購入を検討する人々にも影響を与えています。インフルエンサーマーケティングは、より伝統的なマーケティングチャンネルと同じようにコストがかかるため、企業にとって最も効果的なインフルエンサーを選択することは非常に重要です。 こういった背景において、この論文では、ソーシャルメディアで本当に影響力をもつ人、そしてその影響程度はなにかについて分析することを目指しています。ケーススタディは、感情面の影響を与えることに焦点を当てています。また、多くのフォロワーを持つインフルエンサーとその色んな投稿とアクティビティを分析します。実施するには、Pythonのライブラリとコードが使用されます。次に、彼らのアクティビティとネットワークを分析して、それらの影響範囲を分析します。これらの分析には、SAS Viyaのテキストおよびネットワーク分析機能が使用されます。データ収集ステップ(Python)はクライアントとしてJupyter Notebookを使用していますが、分析ステップは主にSAS Visual Text Analytics(Model Studio)とSAS Visual Analyticsを使用して行われています。 4.Take
Tag: SAS Viya
Enterprise Open Analytics PlatformであるSAS Viyaでは、コーディングスキルを持たないビジネスアナリストやビジネスユーザーでも、Model Studioを使用し、機械学習のモデル、時系列予測のモデル、テキストマイニングのモデルをGUIベースの簡単マウス操作で作成することができるようになっています。モデル生成プロセスをグラフィカルなフロー図として描き、実行するだけです。このフロー図のことを「パイプライン」と呼んでいます。 これまで、ビジュアルパイプラインを用いた機械学習のモデル生成は紹介してきましたが、今回は、時系列予測の基本的な手順を紹介します。 Model Studioで時系列予測を実行する基本的な手順は以下の通りです。 ① プロジェクトの新規作成 ② 学習用の時系列データ内項目へ役割設定 ③ パイプラインの作成と実行 ④ 予測結果確認 ⑤ 予測値のオーバーライト(必要に応じて) ① プロジェクトの新規作成 SAS Viyaの統合GUIのホームページのメニューから「モデルの作成」を選択し、表示されるModel Studioの画面から「プロジェクトの新規作成」をクリックします。 「プロジェクトの新規作成」画面内で、プロジェクトの名前を入力し、モデルの種類(データマイニングと機械学習 / テキスト分析 / 予測)から「予測」を選択します。使用するパイプライン・テンプレートとして、デフォルトでは、「自動予測」が選択されていますが、必要に応じてテンプレートを変更することができます。 今回は、「自動予測」テンプレートを使用してみましょう。 学習用の時系列データを選択し、「保存」をクリックします。 すると、指定したデータソース内の変数リストが表示されます。 ② 学習用の時系列データ内項目へ役割設定 表示された「データ」タブ内で、変数ごとに右側画面内で役割を選択します。 ・注文日:時間 <-日付属性データ項目には自動的に“時間”役割が設定されます。 ・売上:従属 <-予測対象の項目 ・原価:独立 <-予測対象に影響を及ぼす項目 ・販売地域と製品ライン:BY変数 <-地域別や製品ライン別で予測結果を見ることができます。 「テーブルの表示」アイコンをクリックすると、データの中身を確認できます。 ご覧の通り、このデータは年月ごと、販売地域、製品ライン、製品ごとの売上や原価、などの情報を持つ時系列データです。 注. 今回使用するデータでは、時系列データとその属性データ(地域、製品ライン、製品)が一つにマージされているデータを使用していますが、時系列データと属性データをそれぞれ別データとして取り込むことも可能です。そうすれば、メモリーにロードするデータ量を削減することができます。 ③ パイプラインの作成と実行 役割を設定後、「パイプライン」タブをクリックすると、「自動予測」のパイプラインが表示されます。 右側画面には「自動予測」ノードのオプションが表示されています。ご覧の通り、自動予測では、ESM(指数平滑化)とARIMAの2つの手法で予測を実行し、その中から最良のモデルが使用されます。 必要に応じて、IDM(間欠需要モデル)とUCM(観測不能成分モデル)を追加することも可能です。 左画面内のノードリストから必要な機能をドラッグ操作でパイプラインへ追加することができます。 その中にはニューラルネットワークに基づく手法も用意されています。 今回は、「ナイーブモデル予測」を加えてみましょう。 左側のノードリスト内から「ナイーブモデル予測」をパイプラインの「データ」ノードにドラッグするだけです。 それでは、パイプラインの右上の「パイプラインの実行」ボタンをクリックして、このパイプラインを実行しましょう。 正常に完了するとすべてのノード上に緑のチェックマークが表示されます。 「データ」ノードのメニューから「時系列ビューア」を選択すると、 学習データ内容を時系列チャートで確認することができます。 役割にBY変数を指定した、販売地域と製品ラインで絞り込んで見ることもできます。 以下は、地域:Region2、製品ライン:Line3に絞り込んだチャートです。 ④ 予測結果確認
例年と同様に、SAS Instituteはグローバル各国でフォーラムを開催しました。日本ではSAS Forum Japanと題して6月11日に東京の六本木で開催され、また、アメリカSAS本社はダラスでSAS Global Forum 2019を開催(4/28~5/1)し、その中では多数の論文が発表されています。本シリーズでは、これらの論文の中から、OSSとSASプラットフォーム製品のユースケース、OSSコーディング開発・運用事例、クラウドアーキテクチャの設計と運用等々の注目された内容を選別した上で、4回に分けて紹介していきます。 第1回「OSS言語から活用できるオープンなSASプラットフォーム」 近年、OSS(オープンソースソフトウェア)プログラミング言語が数多くのデータサイエンティストや企業によって利用され、分析モデルが開発されています。PythonやR、Luaなどデータサイエンティストや開発者たちに好かれたプログラミング言語はアナリティクス業界に革新をもたらしました。SASはそれらのOSSユーザと企業の要望に応じ、従来のSASユーザとOSSプログラミングユーザーたちが共同作業、かつ連携できるようなプラットフォームを提供しています。 今回は、OSSユーザがどのような方法を利用し、SASプラットフォーム上で自由自在なデータ分析を行えるのかをテーマとし、SAS Global Forumで公開した論文をご紹介します。 1.Open Visualization with SAS® Viya® and Python この論文では、オープンソース言語の一つであるPythonに関し、SAS ViyaのSWAT(Scripting Wrapper for Analytics Transfer)を通じて、メインにオープンソースのグラフィックテクノロジー、特にPythonのMatplotライブラリ、そして現在主流となっているD3の可視化フレームワークとのインテグレーション技術について紹介しています。本文で用いた例は、統計プログラミングのサンプルを使って、Jupyter NotebookからSAS Viyaの機能を呼び出し、最終的に、mpld3で作られた静的なグラフを動的グラフに変更した例となります。 2.SWAT’s it all about? SAS Viya® for Python Users SASは2016の7月にPythonライブラリSWATをリリースしました。それにより、PythonユーザはSASのCASに接続して、SAS Viyaの各種機能を使えるようになりました。SWATを利用することで、SAS言語バックグラウンドを持っていないユーザには、SAS言語ユーザと同じくCASとSAS Viyaの各種機能を使用できるようになります。この論文では、Python SWATを通じて、CASセッションへ接続し、PythonからCASへデータをロードし、さらにCASアクションで実行して分析する一連作業をデモンストレーションの形で紹介します。使用するデータは、SASほかのアプリケーション、例えばVisual Analyticsなどでも利用できる様子を紹介します。 3.Deploying Models Using SAS® and Open Source 近来、機械学習と人工知能の議論はほとんどの時間がモデル開発の議論に費やされています。しかし、モデルによって得られる洞察をどのように効率的にビジネス価値創出に適用するかに関してはほとんど議論されていません。この論文では、モデルの構築に応じ、Docker、Flask、Jenkins、Jupyter、Pythonなどのオープンソースプロジェクトとの組み合わせで、SASを使用してモデルを展開するためのDevOpsプリンシパルの使用例を紹介します。例に使われている関連アプリケーションはグローバルなユーザベースを持つ資産上のレコメンド・エンジンとなります。この使用例は、セキュリティ、待ち時間、スケーラビリティ、再現性に直面する必要があることをめぐってディスカッションします。最後に、その解決策となるソリューションとその課題となる部分を含めて説明します。 4.SAS®
PythonからSAS Viyaの機能を利用するための基本パッケージであるSWATと、よりハイレベルなPython向けAPIパッケージであるDLPyを使用して、Jupyter NotebookからPythonでSAS Viyaの機能を使用してセマンティック・セグメンテーション(Semantic Segmentation)を試してみました。 大まかな処理の流れは以下の通りです。 1. 必要なパッケージ(ライブラリ)のインポートとセッションの作成 2. 画像データ内容の確認とセグメンテーション用データセットの作成 3. モデル構造の定義 4. モデル生成(学習) 5. セグメンテーション(スコアリング) 1. 必要なパッケージ(ライブラリ)のインポートとセッションの作成 swatやdlpyなど、必要なパッケージをインポートします。 %matplotlib inline # SWAT パッケージのインポート import swat as sw import sys # DLPy パッケージのインポート import dlpy from dlpy.network import * from dlpy.utils import * from dlpy.applications import * from dlpy.model
SAS Viyaのディープラーニング機能をPythonから利用するためのハイレベルAPIパッケージの最新版であるDLPy1.1では、主にCNN(Convolutional Neural Network)に関連する機能が拡張されています。 主な拡張機能: ・新たに3つのネットワーク構造に対応 【U-Net】 元々は、医療用画像のセグメンテーション向けに開発されたネットワークです。 (出典:https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/) 【MobileNet】 モバイル端末のようなリソースの少ない環境でも、畳み込み計算を分割(Depthwise Separable Convolution)することで、軽快に、素早く、そして精度の高い結果を得ることができると言われているネットワークです。 左が一般的な畳み込み構造。右が、MobileNetの構造。(出典:https://arxiv.org/pdf/1704.04861.pdf) 【ShuffleNet】 MobileNet同様に軽量軽快なネットワークですが、MobileNetでの畳み込みの分割に加えて、その名の通り、チャンネルをシャッフルしてチャンネル間での畳み込みを行い、特徴抽出を効率化するネットワーク構造です。 (出典:https://arxiv.org/pdf/1707.01083.pdf) ・上記ネットワーク構造に伴う、畳み込み層機能の拡張 【transpose convolution(転置畳み込み)】 Deconvolution(逆畳み込み)とも言われ、元となる画像に0 paddingして拡大してから畳み込む手法です。(上記U-Netに関連) 【group convolution(グループ化畳み込み)】 入力層をチャンネル方向にグループ分割して、グループごとに畳み込みを行い、最後に結合して出力する手法です。分割することで計算量を小さくすることができます。(上記MobileNet、ShuffleNetに関連) ・画像解析手法の拡張 【物体検出(Object Detection)手法にFaster R-CNNを追加】 R-CNNからFast R-CNN、そしてFaster R-CNNへと処理時間の短縮と精度向上が図られ進化してきているアルゴリズムです。 (出典:https://arxiv.org/pdf/1506.01497.pdf) DLPyの従来版からサポートしているYOLOに比べると処理時間はかかりますが、より高い精度を得ることができます。 【新たにセグメンテーション(Semantic Segmentation)に対応】 セグメンテーションは、画像中に存在する複数の物体や領域に対して、ピクセルレベルで推定する問題です。画像を入力すると、各画素に対して識別結果が付与された画像を出力します。一般的には、 Nクラスのセグメンテーションモデルは、Nチャンネルの出力画像を出力し、各チャンネルの画素値は各クラスの確率を表します。(上記U-Netに関連) 以上のように、PythonユーザーがDLPyを通して活用することができる、SAS Viyaのディープラーニング(CNN)機能が拡張されています。 ※DLPyの詳細に関しては、Githubサイトでご覧いただけます。 ※Enterprise Open Analytics Platform 「SAS Viya」 を知りたいなら「特設サイト」へGO!
SAS Viyaでは、Model Studioを使用し、機械学習のモデル、時系列予測のモデル、テキストマイニングのモデルをGUIベースの簡単マウス操作で作成することができます。モデル生成プロセスをグラフィカルなフロー図として描き、実行するだけです。このフロー図のことを「パイプライン」と呼んでいます。 「SAS Viya: ビジュアルパイプラインで予測モデル生成(基本編)」では、モデル生成と精度評価の基本的な流れを紹介しましたが、今回は、生成したチャンピオンモデルに新しいデータを当てはめてインタラクティブにスコアリングを実行する手順を紹介します。また、スコアリング結果のデータの探索や、エクスポートまで試してみましょう。 「SAS Viya: ビジュアルパイプラインで予測モデル生成(基本編)」で作成したパイプラインでは、勾配ブースティングのモデルの方が精度が高い=チャンピオンモデルだと判断されました。 それでは、このモデルに新しいデータを当てはめてスコアリングを実行してみましょう。 まず、画面左側の機能ノードリストの「その他」セクション内にある「データのスコア」を「勾配ブースティング」ノード上にドラッグすると、「勾配ブースティング」ノードの下に「データのスコア」ノードが追加されます。 「データのスコア」ノードを選択し、画面右側で以下の項目を指定します。 ・モデルに当てはめるデータテーブル名 ・スコアリング結果データの出力先ライブラリとテーブル名 「データのスコア」を右クリックし、表示されるメニューから「実行」をクリックすると、スコアリングが実行されます。 スコアリング処理が完了すると「データのスコア」ノード上に緑色のチェックマークアイコンが表示されます。 それでは、スコアリング結果のデータを見てみましょう。 「データのスコア」ノードを右クリックし、表示されるメニューから「結果」を選択します。 すると、データのスコアの結果画面が表示され、「出力データ」タブ内で、データの中身を確認することができます。「予測:BAD=1」列に、顧客ごとの延滞確率に相当するスコア値が表示されています。 それでは、このデータを探索してみましょう。 「探索とビジュアル化」アイコンをクリックし、 表示される画面内で、このデータを探索用に保存する先のライブラリとテーブル名を指定し、「探索とビジュアル化」ボタンをクリックします。 すると、このデータに基づき、「SAS Visual Analytics – データ探索とビジュアル化」画面が表示され、データ探索やレポーティングが可能になります。 例えば、スコア値である「予測:BAD=1」変数と「資産に対する負債の割合」変数の関係性を探索したり、 スコア値が0.7以上の顧客データをエクスポートして、二次活用したり、等々も簡単です。 以上のように、SAS Viyaでは、データの準備はもとより、モデル生成からスコアリング、そして、スコアリング結果データの探索からエクスポートまでをGUIベースでシームレスに実施することができるんですね。 ※Enterprise Open Analytics Platform 「SAS Viya」 を知りたいなら「特設サイト」へGO! ※「ビジュアルパイプラインでスコアリング」は、SAS Viya特設サイトにデモ動画を近々公開予定です。
この記事はSAS Institute Japanが翻訳および編集したもので、もともとはXindian Longによって執筆されました。元記事はこちらです(英語)。 物体検出とは? 物体検出とはコンピューター・ビジョンの一分野であり、画像内に含まれる関心対象の物体を自動的に背景から区別して位置特定する手法です。例えば、図1に示す2つの画像では、いずれも前景に物体があります。左の画像では鳥が、右の画像では犬と人間が前景にあります。 「物体検出問題の解決」とは、「これらの物体をぴったりと囲むバウンディング・ボックスを配置し、それぞれのバウンディング・ボックスに対して正しい物体カテゴリーを関連付けること」を意味します。画像処理の領域における他のタスクと同様、物体検出を実行するときにもディープ・ラーニングは最先端の手法として力を発揮します。 物体検出の仕組み 物体検出に関する重要な問題の1つは、前景にある物体の数が画像によって様々に異なる、ということです。しかし、ここでは物体検出の仕組みを理解するために、まずは1つの画像に1個の物体しか存在しないと仮定し、この制約条件の下で物体検出問題を考えてみましょう。1つの画像に1個の物体しか存在しない場合、バウンディング・ボックスの発見と物体のカテゴリー判断という問題は、単純明快な方法で解決することができます。バウンディング・ボックスは4組の数値で表現されますから、バウンディング・ボックスの位置を学習するタスクは、回帰問題として無理なくモデル化することが可能です。そのタスクが済めば、物体のカテゴリー判断は分類問題として解くことができます。 ここでの「制約条件付きの物体検出」という課題に関する回帰および分類問題に対する解法を提供するのは、図2に示す畳み込みニューラル・ネットワーク(CNN)です。コンピューター・ビジョンの領域における他の従来型タスク(例:画像認識、キーポイント検出、セマンティック・セグメンテーションなど)の場合と同様、ここでの「制約条件付きの物体検出」という課題では、固定数のターゲットを扱います。これらのターゲットの当てはめは、固定数の分類または回帰問題としてターゲットをモデル化することによって実行可能です。 前述のとおり、真の物体検出はN個の物体を処理できなければなりません(Nの値は画像によって異なります)。残念ながら、図2に示したCNNは、このような、より一般的な問題を解決することができません。しかし、多くの矩形ボックスの位置とサイズについて仮説を立てることによってCNNの変種を使用し、CNNを物体の分類にのみ利用する、というやり方は可能かもしれません。私たちはそのような場合の矩形ボックスを、しばしば「ウィンドウ」と呼びます。ウィンドウ仮説を汎用的なものにするためには、画像内で考えられる全ての位置とサイズをカバーしなければなりません。それができれば、それぞれのサイズと位置のウィンドウについて、「その中に物体が存在するかどうか?」と、「存在する場合、物体のカテゴリーは何か?」を判断することが可能になります。 図3は、このアプローチで物体検出を実現する場合に候補となりうるウィンドウをいくつか示しています。画像は有限個のピクセルで構成されていますから、ウィンドウの総数は膨大です。検討すべきウィンドウの数の膨大さを考えると、このアプローチはコンピューティングの観点からは非実用的です。 ウィンドウを用いて物体を探すための効率的な手法 では、「一部のウィンドウだけを調べる」というスマートな方法で物体検出を実行することは可能でしょうか? 答えは「イエス」です。このような「ウィンドウの部分集合」を発見する方法には2つのアプローチがあり、それらは2つの異なる物体検出アルゴリズムへとつながります。 第1のカテゴリーのアルゴリズムは、最初にリージョン・プロポーザル(領域候補の抽出)を実行します。これは具体的には、コンピューター・ビジョンの従来の手法(選択的検索など)を用いて、あるいは、ディープ・ラーニングに基づくリージョン・プロポーザル・ネットワーク(region proposal network: RPN)を用いて、物体を含んでいる可能性の高い領域を選択する、ということです。候補ウィンドウの少数のセットを収集したら、セットの数だけ回帰モデルおよび分類モデルを定式化することによって、物体検出問題を解決することができます。このカテゴリーに属するアルゴリズムとしては、Faster R-CNN[1]、R_FCN[2]、FPN-FRCN[3] などがあります。このカテゴリーのアルゴリズムは、通常、「2段階法」と呼ばれます。これらは一般に、この後に紹介する「1段階法」に比べ、正確性は優れていますが、処理は低速です。 第2のカテゴリーのアルゴリズムは、固定位置にある固定サイズの物体だけを探します。これらの位置とサイズは、ほとんどのシナリオがカバーされるように戦略的に選択されます。通常、これらのアルゴリズムは、元の画像を固定サイズのグリッド(格子)領域に分割した上で、それぞれのグリッド領域に関して、あらかじめ決めておいた所定の形状およびサイズの、固定数の物体を予測することを試みます。このカテゴリーに属するアルゴリズムは「1段階法」と呼ばれます。この手法の例としては、YOLO[4]、SSD[5]、RetinaNet[6]などが挙げられます。このカテゴリーのアルゴリズムは、通常、より高速に実行できますが、正確性は劣ります。このタイプのアルゴリズムは、リアルタイム検出を必要とするアプリケーションで活用されることが多くなっています。 以下では、これらのうち2つの一般的な物体検出手法を取り上げ、もう少し詳しく検討します。 YOLOによる物体検出 YOLO (You Only Look Once) は、1段階の物体検出手法を用いる代表的なアルゴリズムです。このアルゴリズムが物体を検出するためにたどるステップを、図4とその下の箇条書きに示します。 元の画像を等サイズのグリッドに分割します。 それぞれのグリッドに関して、事前に定義した形状の、グリッドの中心を中心位置とするバウンディング・ボックスを、事前に設定した数だけ予測します。それぞれの予測には、クラス確率と物体信頼度(その領域が物体を含んでいるか、あるいは背景のみか)が関連付けられます。 最後に、高い物体信頼度およびクラス確率が関連付けられたバウンディング・ボックスを選択します。最も高いクラス確率を持つ物体クラスが、その物体のカテゴリーとなります。 事前に定義した形状の事前に設定した数のバウンディング・ボックスは「アンカーボックス」と呼ばれ、k平均法アルゴリズムによってデータから取得されます。アンカーボックスは、物体のサイズと形状についてデータセットから予備知識を捕捉します。異なるサイズおよび形状の物体を検出するためには、異なるアンカーが設計されます。例えば図5では、1つの場所に3種類のアンカーが表示されていますが、最終的には赤のアンカーボックスが中央の人物を検出します。言い換えると、アルゴリズムは、物体とこのアンカーボックスの適切なサイズを一緒に検出します。通常、最終的な予測は、アンカーの位置またはサイズ自体とは異なります。なぜなら、画像の特徴量マップから取得される最適化されたオフセット値が、アンカーの位置またはサイズに加算されるからです。 YOLOアルゴリズムのアーキテクチャを図6に示します。検出層は、多数の回帰および分類オプティマイザーを含んでおり、その数はアンカーの数によって決まります。 Faster RCNNによる物体検出 Faster RCNN[1] は、2段階の物体検出アルゴリズムです。図7は、Faster RCNNの2つの段階を示しています。アルゴリズム名に “Faster” と付いていますが、「1段階法よりも高速」という意味ではありません。この名称は歴史的な経緯を反映しており、以前のバージョン(オリジナルのRCNNアルゴリズム[7] やその後継のFast RCNN[8])よりも高速であることを示しています。Faster RCNNにおける高速化は、個々の関心領域(Region of Interest: RoI)に関する特徴抽出計算を共有する手法と、ディープ・ラーニングに基づくリージョン・プロポーザル・ネットワーク(RPN)の導入によって実現されています。 多数のCNN層を用いて特徴量マップを抽出した後、リージョン・プロポーザル・ネットワーク(RPN)が、物体を含んでいる可能性の高い多数のウィンドウを出力します。その後、アルゴリズムは、各ウィンドウ内部の特徴量マップを取得し、それらを固定サイズにリサイズ(またはポール)することで(=RoIプーリング)、物体のクラス確率とより正確なバウンディング・ボックスを予測します。
データサイエンティスト(以降、DSと表記)は、お好みのプログラミング言語を使用して、日々モデリングを行っています。昨今は、その中でもオープンソースのプログラミング言語であるPythonやRを使用されている方の割合が多くなってきているようです。その結果として、企業の分析組織やチーム内には複数の異なる言語を活用するDSが混在するケースも見受けられます。(一人で両方の言語を操る方もいます。) 「Pythonを操るAさんが作成されたモデルと、Rを操るBさんが作成されたモデル、どちらの精度が高いのかを容易かつビジュアルに比較することができたら…」 ということで、今回は、SAS ViyaのModel Studioを使用し、ビジュアルなパイプライン上での異なる言語間モデル精度比較をご紹介します。 手順は以下の通りです。 ① プロジェクトの新規作成と学習用のデータソース選択 ② パイプラインの作成と実行 ③ 実行結果(モデル精度)の確認 ① プロジェクトの新規作成と学習用のデータソース選択 「SAS Viya: ビジュアルパイプラインで予測モデル生成(基本編)」の「1.プロジェクトの新規作成と学習用のデータソース選択」を参照ください。 ② パイプラインの作成と実行 画面上部にある「パイプライン」をクリックします。 パイプラインには「データ」ノードのみが表示されています。左端の機能ノードアイコンをクリックすると、 パイプラインに追加可能な機能ノードのリストが表示されます。 まずは学習データに対する前処理として、欠損値補完を行います。 「データマイニングの前処理」内にある「補完」を「データ」ノード上にドラッグすると、 「データ」ノードの下に「補完」ノードが追加されます。 同様の手順で、「その他」内にある「オープンソースコード」を「補完」ノード上へドラッグすると、「補完」ノードの下に「オープンソースコード」ノードが追加されます。 機能ノードごとのオプション設定は、右側画面内で行います。 「言語」が「Python」であることを確認し、「開く」をクリックします。 開かれた画面内に、比較対象のPythonのコード(ランダムフォレストのモデル)をコピーします。右上の「保存」(フロッピーディスクアイコン)をクリックし、「閉じる」をクリックします。 ※ターゲット変数名や入力変数リスト名など、画面左側の変数名を使用することによって、オープンソースコードノードとその他のノード間でのデータ連携が可能となり、異なる言語のモデル間での精度比較も可能になります。各種規定変数名の詳細に関しては、オンラインマニュアルを参照してください。 「オープンソースコード」ノードの右側にある3つのドットが縦に並んでいる(スノーマン)アイコンをクリックし、「名前の変更」を選択し、 「Pythonフォレストモデル」に変更します。 このようにドラッグ操作でノードを追加する以外に、パイプライン上のメニューからノードを追加することもできます。 「補完」ノードのスノーマンアイコンをクリックし、「下に追加」>「その他」>「オープンソースコード」の順に選択すると、 「補完」ノードの下に「オープンソースコード」ノードが追加されます。 以降、同様の手順で比較対象のRのコード(ランダムフォレストのモデル)をコピーし、ノードの名前を変更します。 「オープンソースコード」ノードは、データに対する前処理として使用することもできます。デフォルトでは、「オープンソースコード」ノードは、データに対する前処理として認識されているので、これを「教師あり学習」に切り替えます。 PythonとRのモデルノードそれぞれのスノーマンアイコンをクリックし、「移動」>「教師あり学習」を選択します。 すると、「モデルの比較」ノードが追加され、PythonとRのモデルノードと接続されます。 パイプラインが完成したので、右上の「パイプラインの実行」アイコンをクリックし、実行します。 ③ 実行結果(モデル精度)の確認 処理が正常に完了したら、「モデル比較」ノードのスノーマンアイコンをクリックし、「結果」を選択します。 Rのフォレストモデルの方が精度が高い、チャンピオンモデルであると表示されました。 リフトやROC、様々な統計量で、精度を詳細に比較することもできます。 以上が、ビジュアルパイプラインでPythonとRのモデル精度を比較する手順です。 もちろん、必要に応じて、PythonやRのモデルとSASのモデルの精度を比較することもできます。 ※ビジュアルパイプラインでPythonとRのモデル精度を比較は、SAS Viya特設サイトにある動画でもご覧いただけます。 ※実際にPythonとRのモデル精度比較を試してみたい方は、Githubに公開されているアセットを活用ください。
近年、AIや機械学習がブームとなり、キーワードだけが先走りしている傾向にあります。結果、「AI・機械学習を活用する」こと自体が目的化し、ツールや環境を導入したものの、ビジネス価値創出に至らないケースも多いようです。 その最大の要因は、肝となる「アナリティクス・ライフサイクル」の欠如にあります。 まず、業務課題を明確化した上で、その課題を解決するためにはデータ分析が必要であり、分析には元となるデータが必要になります。必要なデータを準備し、その中身を探索し、その結果に基づいて予測モデルを開発し、作成されたモデルを業務に実装する、このサイクルを素早く回し続ける、これが、企業が抱える業務課題を解決し、ビジネス価値(収益の拡大、コストの削減、リスクの低減、など)を創出するための鍵なのです。 アナリティクス・ライフサイクルを構成する3つの要素: アナリティクス・ライフサイクルを素早く回すためには、上記3つの要素がシームレスに連携する必要があります。しかし、多くの企業では、従来から、複数の異なるベンダーの異なる商用ソフトウエアや環境、あるいはオープンソースソフトウエアなどを継ぎ接ぎして分析環境を構築してきたため、このサイクルを回すためには多大な時間を擁してしまい、変化への素早い対応は困難な状況にありました。 この課題に対して、AIプラットフォーム SAS® Viya®では、アナリティクス・ライフサイクルに必要な機能要素を網羅した上で、それぞれがシームレスに連携し、高速に回し続けることが可能となっています。 そして、SAS Viyaには、分析者のスキルレベルに応じて、プログラミングインターフェースとグラフィカルインターフェースの両方が備わっています。 データサイエンティストであれば、データの準備から探索、そしてモデル生成までをお好みの言語(SAS, Python, R, Java, Lua)を使用して実施することができます。 一方で、コーディングスキルを持たないビジネスユーザーであれば、統合グラフィカルユーザーインターフェース上でアナリティクス・ライフサイクルをシームレスかつ高速に回し続けることが可能となっています。 企業が、その企業の競合企業よりも早く、正確に、アナリティクス・ライフサイクルを回すことによって、以下が実現されます。: より多くの反応率の高いマーケティングキャンペーンをより早く実施し、より多くの新規顧客を獲得し、既存顧客の離反を防止 より早く正確に、より多くの製造設備の異常予兆を検出し、設備のダウンタイムを最小化し、生産量を最大化 より多くの種類の不正をより早く正確に検知し、不正により齎されるリスクや損失を低減し、企業の信頼度を向上 企業を取り巻く環境の変化に、より素早く対応 …など Data:データの準備 異なる分析要件ごとに、分析者自身で、分析に必要なデータは都度準備する必要があります。SAS Viyaでは、分析者自身で分析に必要なデータをセルフサービス型で準備することができるようになっています。 マウスのポイント&クリック操作だけで、データのプロファイリングからクレンジング、加工・変換・結合などを自由自在に行うことができ、分析プロセス全体の中で7、8割の工数を占めると言われるデータ準備工数や時間を大幅に削減することが可能となります。 Discovery:データの探索とモデル生成 次に、準備したデータの中身を探索します。SAS Viyaでは、コーディングスキルを持たないビジネスユーザーでもマウスの簡単操作だけで、データの探索や分析が可能になっています。単一の画面内で、過去の見える化から高度な機械学習までもが可能で、できあがった画面をレポートやダッシュボードとして即座に全社に公開し、共有することもできます。 データサイエンティストであれば、モデル生成の手前のビジュアルなデータ探索手段として活用することができます。 データ探索の結果に基づき、予測モデルを構築します。 SAS Viyaでは、ビジュアルなUIからマウスのドラッグ&ドロップ操作で、機械学習、時系列予測、テキスト解析の各種モデル生成プロセスをグラフィカルなフロー図(パイプライン)として描き、実行することが可能になっています。 このモデル生成パイプラインは、ドラッグ操作で一から作り上げることもできますし、SASの長年のベストプラクティスに基づき、予め用意されているパイプラインのテンプレートを使用して、精度の高い予測モデルを自動生成することも可能です。 Deployment:モデルの業務実装 生成されたモデルは統合的に管理した上で、業務に実装することができます。 モデル管理画面では、モデルにテストデータを当てはめてスコアリングテストの実施や、モデルのデプロイ(業務実装)、業務に実装後のモデル精度のモニタリング、再学習を実行し、モデル精度を改善、そしてバージョン管理など、モデルを統合管理することができます。 管理されたモデルは、異なる業務要件ごとに異なる環境へデプロイ(業務実装)することができます。 REST API:既存のアプリケーションからREST APIを通じて、SAS Viyaサーバー上にあるモデルにデータを当てはめてスコアリング(予測処理)を行い、結果を受け取ることができます。 インデータベース:モデルをデータベース内にデプロイし、データベース内で直接スコアリングを実施することができます。これによって、スコアリング対象の大量のデータを転送する必要が無くなり、処理の効率化や意思決定の迅速化も図れます。 インストリーム:SAS Viyaには、オンライン機械学習・リアルタイム処理向けにストリーミングのエンジンも実装されています。SAS Viyaのリアルタイムプロセスにモデルをデプロイすることで、リアルタイム・スコアリングも実現されます。 以上のように、企業が業務課題を解決し、ビジネス価値を創出するためには、「アナリティクス・ライフサイクル」が肝であり、このサイクルをシームレスかつ素早く回し続けることが、企業の変化対応力、競争力強化に直結するということです。 従来からSASを活用し、ビジネス価値を出している企業はすべてこのサイクルを回し続けています。そして、AIプラットフォームSAS Viyaでは、これを強力に支援することができるということです。
PythonからSAS Viyaの機能を利用するための基本パッケージであるSWATと、よりハイレベルなPython向けAPIパッケージであるDLPyを使用して、Jupyter NotebookからPythonでSAS Viyaのディープラーニング機能を使用した時系列予測を試してみました。 大まかな処理の流れは以下の通りです。 1.必要なパッケージ(ライブラリ)のインポート 2.Sin波データの生成 3.セッションの作成 4.RNN向け時系列データセットの作成 5.モデル構造の定義 6.モデル生成(学習) 7.予測 1.必要なパッケージ(ライブラリ)のインポート swatやdlpyなど、必要なパッケージをインポートします。 import numpy as np import pandas as pd import matplotlib.pyplot as plt import swat.cas.datamsghandlers as dmh from swat import * import dlpy from dlpy import Sequential from dlpy.layers import * from dlpy.model import Optimizer, AdamSolver, Sequence