SAS Japan
活用事例からデータ分析のテクニックまで、SAS Japanが解き明かすアナリティクスの全てこの記事は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に公開されているアセットを活用ください。
第1回に引き続き、データサイエンティストを目指す学生向けのセミナー「データサイエンティストのキャリアと活躍のかたち」の第2回が1/31(木)に開催されました。当日の様子について紹介します。 このセミナーはデータサイエンティストのキャリアと活躍の場や、ビジネスではアナリティクスがどのように活用されているかについて、スピーカーがこれまでの経験をもとに紹介するものです。 経営幹部候補としてのデータサイエンティスト はじめに、データサイエンティストのキャリアについて、コニカミノルタジャパン株式会社・松木さんの講演です。コニカミノルタジャパンでは、2016年にデータサイエンス推進室を設置し、コピー機の買替・故障・受注の予測などにデータ分析を活用しているそうです。 まず、成果を出せるデータサイエンティストのキャリア形成についての話です。この話題の中では「データサイエンティストとは経営幹部候補、すなわち分析・数理モデルで経営課題を解決できる人材である」という一文がとても印象的でした。松木さんは、ただ分析作業ができる・数理モデルを作成できるだけではなく、それらの優れた技術をツールとして経営課題の解決ができる人材というのがデータサイエンティストのあるべき姿と考えると言っていました。 次に、データサイエンティストに求められるスキルについてです。そのスキルとは主に、分析スキル・ITスキル・ビジネススキルに分けられますが、その中でもビジネススキルは他の2つに比べて教育が困難であり、知識と経験が必要です。そこで実際にコニカミノルタジャパンでは、分析・ITスキルをもつデータサイエンティストと、ビジネススキルを持つ他部署メンバーとが共同して分析を行う仕組み(=タスクフォースユニット)でデータサイエンティストのビジネススキルを補うことを行っているそうです。 こうして、組織単位で分析を進めるにあたって欠かせないのがコミュニケーション能力です。ここで言うコミュニケーション能力とは、単純に人と仲良くなれるという意味よりも、「相手を理解するための、幅広い知識を習得する」「相手が理解できるようにデータサイエンスの見える化をする」ことを指します。現場や他部署メンバーの考えを理解するためのビジネスにおける幅広い知識、データサイエンスの知見がない人でも一目でわかる環境の構築が必要であるとのことでした。 講演の最後には、「データサイエンティストは多種多様な専門性が必要である」というメッセージをいただきました。これまでの話にもあったように、数理モデルの開発といった場面は仕事の一部で、ビジネススキルやコミュニケーション能力を活用することでいかに他の社員に、現場に「みせる」かが重要であるということを学生に伝えていただきました。 ビジネスで活用されるアナリティクス “顧客理解” 次に、ビジネスで活用されるアナリティクスについて、SAS Japanの庄子による講演です。 「通信販売サイトから自分だけのクーポンが送られてきた」、「動画配信サービスに自分好みの動画がおすすめされる」、「携帯電話の学割があれほどまで安い」などといった例を挙げ、私たちが日常生活においてデータ分析の恩恵をどれだけ受けていると思うか?という質問を導入として講義は始まりました。また、消費者のうち64%は支払う金額よりもそのもの自体の質を重視するにもかかわらず、それを完璧に捉えることが出来ている企業はわずか6%であるという話もあり、顧客理解の重要性を直観的に感じることが出来ました。 顧客理解について、前半ではそのコンセプトの紹介です。 顧客理解とは何を理解するのか?代表的な3つの項目があります。 「顧客の優良度・リスク」:どの顧客が特に大事か、損をもたらす可能性が高いか 「顧客の嗜好」:個々に異なる顧客の好みに対して何を薦めるべきか 「顧客の行動」:顧客の生活パターンや生活圏等を考慮する この3項目について、携帯キャリアの顧客理解に関する施策を顧客の加入から解約の流れに沿って例示していました。 後半は具体的に3つの項目についてどのような分析を行っているかについて、前半にもあった携帯キャリアの顧客理解に関連する具体的な施策に3項目をそれぞれ当てはめて紹介していました。ここではその一部を簡潔に紹介します。 「顧客の優良度」:生涯価値(Life Time Value)の算出(どれくらい先まで契約の継続をしそうか、機種変更はいつ頃しそうか) 「顧客の嗜好」:テキストを用いた趣味嗜好判定 「顧客の行動」:位置情報による生活圏の特定 最後には、「企業のデータ活用はまだまだ発展途上でみなさんの活躍が企業や世の中を大きく変える」という前向きなメッセージと、情報倫理のプライバシー懸念について「倫理観が大事”Don’t Be Evil”(by Google)」という助言の両方を学生に向けたメッセージとして伝えていました。 SAS student Data for Good communityの紹介 セミナーの最後には、学生のデータサイエンティストに向けた学びとしてSAS student Data for Good communityについて紹介しました。 「Data for Good」とは多岐にわたる社会的なテーマから課題を提示し、データを活用して解決しようとするものです。これまでにブログで紹介した世界の絶滅危惧種や通勤ラッシュ時の鉄道混雑緩和をData
私が小学生のころ、21世紀になると自動車は空を飛び、真空チューブの中のリニアモーターカーは時速2000kmに達するものだと思っていましたが、現在のような情報化社会は想像できていませんでした。初めてパソコンに触ったとき、何をするためのものなのかさっぱりわからなかったことを覚えています。 いまの小学生が大人になるころは、どのような社会になっているのでしょうか。10年先、20年先を想像することは難しいですが、子どもたちは、その社会で生きるための力を身につける必要があります。