目次


Data Science Experience 内で Watson と Spark を利用して、ソーシャル・メディアの投稿から洞察を引き出す

データを取得し、キュレート、クレンジング、分析、視覚化、補強してデータの価値を高める

Comments

Excelacom の統計によると、インターネットでは毎分、2,080 万件の WhatsApp メッセージの送信、240 万件の Google 検索、347,222 件のツイート投稿が行われています (2016 年 4 月の時点での統計)。インターネット上で生成されて取り込まれる大量のデータのほとんどは、テキスト、音声、画像、動画といった形式の非構造化データです。この大量の非構造化データを管理して使用するには、新たな計算の枠組みとして、ビッグデータから洞察を引き出せるようにするコグニティブ・コンピューティング・パラダイムが必要になります。

コグニティブ・コンピューティング・システムは、人間がビッグデータを分析し、理解し、洞察を引き出せるよう支援するために、人間との自然な対話によって学習を重ねるシステムとして定義されています。IBM Watson Developer Cloud はコグニティブ・コンピューティング・プラットフォームとして、テキスト、音声、画像など、考えられるあらゆる形式の非構造化データから情報を抽出するように設計された、多種多様なコグニティブ・サービスを提供しています。Watson Developer Cloud のサービスは、以下をはじめとする各種のビジネス問題に対処するために数々のコグニティブ・ソリューションで利用されています。

  • 仮想アシスタント (またはチャット・ボット) の提供
  • ソーシャル・メディアの listen
  • マーケティング・キャンペーン・アナリティクス
  • オーディエンスのセグメンテーションおよびマッチング
  • 大量のデータからの洞察の発見

コグニティブ・ソリューションの中には、ビッグデータ用に最適化されたアナリティクス・ソリューションに Watson Developer Cloud のサービスを統合することで、とりわけ影響力の強い結果を出しているものもあります。このチュートリアルではそのようなソリューションの一例として、Watson Developer Cloud サービスをカスタム機械学習ソリューションに統合するコグニティブ・ソリューションを、IBM Data Science Experience (DSX) を使用して開発する方法を説明します。このチュートリアルで参照する Python TwitterInsightsWatsonDSX ノートブックは、DSX にアップロードして実行できるようになっています。

前提条件

このチュートリアルを完了するには、以下のものが必要です。

  • IBM Cloud アカウント。このアカウントを使用して、Watson サービス、データベース・サービス、および DSX を含むアナリティクス・サービスをプロビジョニングします。DSX を使用して、Python ノートブックのステップに従ってデータを収集し、収集したデータのキュレート、取り込み、補強 (エンリッチメント) を行った上で、データに対してさまざまな分析と学習手法を適用します。
  • Twitter アカウント。ノートブックのデータ・ソースとなるツイートを収集するために必要です。

Twitter 資格情報を取得する

このチュートリアルに従うには、以下の Twitter 資格情報が必要です。

  • コンシューマー・キー (API キー)
  • コンシューマー・シークレット (API シークレット)
  • アクセス・トークン
  • アクセス・トークン・シークレット

以上の Twitter 資格情報をすでに持っている場合は、このステップを省略できます。そうでない場合は、以下の簡単な手順に従って資格情報を入手します。それには何よりもまず、Twitter アカウントが必要です。アカウントをまだ持っていない場合は、https://twitter.com/signup にアクセスしてサインアップしてください。Twitter アカウントを入手した後、以下の手順に従います。

  1. ブラウザーで https://apps.twitter.com/ にアクセスします。
  2. Twitter アカウントのユーザー名とパスワードを入力してログインします。
  3. 「Create New App (新規アプリケーションの作成)」をクリックします。
  4. 作成するアプリケーションの詳細 (名前、説明、Web サイトなど) を入力します。必ず Twitter 開発者向け利用条件を読んで同意してから、「Create your Twitter application (Twitter アプリケーションの作成)」をクリックします。

    これで、アプリケーションが作成されます。

  5. アプリケーションのページで、「Keys and Access Tokens (キーとアクセス・トークン)」タブにナビゲートします。このページ上に表示される「Consumer Key (API Key) (コンシューマー・キー (API キー))」「Consumer Secret (API Secret) (コンシューマー・シークレット (API シークレット))」をコピーします。このチュートリアルでは、これらの情報が必要になります。
  6. アクセス・トークンを取得するために、「Create my access token (アクセス・トークンを取得)」をクリックします。これにより、アクセス・トークンとアクセス・トークン・シークレットの 2 つの資格情報が生成されるので、その資格情報をコピーしておきます。

これで、Twitter の API に接続するために必要な資格情報を入手できました。

IBM Cloud アカウントを作成する

このチュートリアルに従うには、Watson サービスとデータベース・クラウド・サービスをプロビジョニングするための IBM Cloud アカウントが必要です。以下のようにして、IBM Cloud アカウントを作成してください。

  • ブラウザーで https://bluemix.net にアクセスします。
  • 「Create a free account (無料アカウントを作成)」をクリックし、表示される手順に従って必須の情報 (e-メール・アドレス、名前、パスワードなど) を入力します。

IBM Cloud アカウントを入手したら、ターミナルで以下の手順に従って、このチュートリアルに必要なサービスのインスタンスを作成します。つまり、Natural Language Understanding サービスと Personality Insights サービスのインスタンスを作成します。

  1. ターミナル・ウィンドウを開きます。
  2. Cloud Foundry CLI をダウンロードしてインストールします。
  3. ターミナル・ウィンドウで以下のコマンドを実行します。
    cf login
    cf create-service natural-language-understanding free dsxnlu
    cf create-service-key dsxnlu svcKey
    cf service-key dsxnlu svcKey
    cf create-service personality_insights lite dsxpi
    cf create-service-key dsxpi svcKey
    cf service-key dsxpi svcKey

    上記のコマンドは、ユーザーの IBM Cloud アカウントに接続して、Natural Language Understanding サービスと Personality Insights サービスを作成します。これらのサービスにはいずれも無料プランが使用されて、それぞれ dsxnlu、dsxpi という名前が付けられます。このコマンドからは、各サービス用に使用するユーザー名とパスワードも返されます。

  4. ユーザー名とパスワードの資格情報をコピーします。これらの情報はノートブック内でサービスにアクセスする際に必要になります。

Data Science Experience (DSX) サービスを作成する

以下の手順に従って DSX サービスを作成します。

  1. IBM Cloud アカウントにログインします。
  2. 右上にある「Catalog (カタログ)」タブ (以下の図中で、矢印によって示されているタブ) をクリックします。
  3. 左側のナビゲーション内で「Data & Analytics (データとアナリティクス)」カテゴリーを選択します。
  4. 「Data Science Experience」サービス (以下の図中で、楕円の丸で囲まれて示されているサービス) を選択します。 IBM Cloud のカテゴリー画面のスクリーンショット
    IBM Cloud のカテゴリー画面のスクリーンショット
  5. 必要に応じてサービスに名前を付けて、「Free (無料)」プランを選択してから「Create (作成)」をクリックします。 IBM Cloud のカテゴリー画面のスクリーンショット
    IBM Cloud のカテゴリー画面のスクリーンショット
  6. 「Get Started (開始)」をクリックして Data Science Experience サービスを起動します。 IBM Cloud のカテゴリー画面のスクリーンショット
    IBM Cloud のカテゴリー画面のスクリーンショット

別の起動方法として、ブラウザーで https://datascience.ibm.com にアクセスして (右上にある)「Sign In (サインイン)」を選択し、IBM Cloud のユーザー名とパスワードを入力してログインすることで、DSX を起動することもできます。

問題の定義

このチュートリアルで取り上げる問題は、ブランド・アナリティクス、ユーザー・セグメンテーション、パーソナライズしたメッセージングに対処するというものです。私のソリューションでは、ある特定のブランドについて言及しているソーシャル・メディアの投稿を収集し、そのブランドに対するセンチメントを理解して、複数のパラメーター (フォロワーの数、投稿の数、センチメント、パーソナリティー・プロファイルなど) に基づいて消費者をセグメント化します。セグメンテーションの粒度が細かければ細かいほど、ブランド・マネージャーとマーケティング・チームはターゲットを絞り込んだメッセージングおよびマーケティングにより、一層パーソナルな形で消費者に働きかけることができます。

このチュートリアルは汎用のものにしたいので、特定のブランドを参照するのではなく、3 人の人気ミュージシャンに関するデータを収集し、そのデータに対して分析を実行します。

ツールとサービスの概要

ソリューションの詳細を掘り下げる前に、このソリューションで使用する各種のツールとサービスについて説明しておきます。具体的には、このソリューションは Twitter、Watson Developer Cloud、Db2 Warehouse on Cloud、Data Science Experience に依存しています。このセクションでは、これらのツールとサービスのそれぞれを個別に取り上げて説明します。

Twitter

ソーシャル・メディアは、コンピューターを利用して簡単に情報、アイデア、意見を形にできるようにして、仮想コミュニティーやネットワークを介して共有するためのテクノロジーです。よく使われているソーシャル・メディア・プラットフォームには、Facebook、Twitter、LinkedIn、Pinterest、Snapchat などがあります。

ブランドが消費者とつながり、消費者がそのブランドをどのように受け止めているかをより深く理解するためには、ソーシャル・メディア上で消費者の声を聞くという方法が一般的になっています。ソーシャル・メディア・リスニングとは、さまざまなプラットフォームからソーシャル・メディアの投稿を収集し、それらの投稿を分析して総合的な消費者知覚を理解することを意味します。

このチュートリアルでは Twitter 上で 3 人の人気ミュージシャン (@katyperry、@justinbieber、@taylorswift13) に関するデータを収集します。注目すべき点として、ここで私がとっているアプローチは、Twitter 以外のソーシャル・メディア・プラットフォームや、消費者が興味のあるブランド、イベント、団体について意見をシェアする他のデータ・ソースにも同じく適用できます。

Watson Developer Cloud

IBM Watson Developer Cloud は、ビッグデータから洞察を引き出すためのコグニティブ・ソリューションの構築に利用できる、さまざまなサービスを揃えたプラットフォームです。Watson Developer Cloud サービスでは、テキスト、音声、画像を含む非構造化データを理解して洞察を引き出すための幅広い機能を提供しています。これらのサービスのうち、このチュートリアルではセンチメント分析とキーワード抽出に対処するために Natural Language Understanding を利用します。また、ツイート内で表現されたセンチメントキーワード、そしてそのツイートをシェアしたユーザーのパーソナリティー・プロファイルを抽出するために Personality Insights も利用します。

Db2 Warehouse on Cloud

パフォーマンスとスケーラビリティーを念頭に設計されたデータベース、IBM Db2 Warehouse on Cloud は、幅広いツールとの互換性を備えています。超並列処理 (MPP) により、クラスターにさらにサーバーを追加することで、パフォーマンスを向上させ、スケールアウトすることができます。さらに、動的インメモリー・カラムナー・ストア・テクノロジーも活用する Db2 Warehouse on Cloud では、入出力が最小限に抑えられ、従来の行ストア・データベースと比べて桁違いの処理スピードを実現することができます。

Data Science Experience

IBM Data Science Experience (DSX) は、R、Python、Scala などの複数のオープンソース・ツールに対応し、データから洞察をキャプチャーするソリューションの作成、統合、連携環境として利用できるクラウド・ベースのソーシャル・ワークスペースです。IBM DSX を利用すると、データ調査担当者が大規模なデータ・セットを分析するための豊富なオープンソース機能を使用して、データ駆動型のソーシャル・コラボレーション環境内で同僚と共同作業を行うことができます。

DSX アカウントでは、デフォルトで (IBM Cloud 上でプロビジョニングされる) Apache Spark サービスを利用できるようになっています。Apache Spark は大規模なデータを効率的に処理できる高速のオープンソース・クラスター計算エンジンです。Apache Spark テクノロジーにより、プログラムは Haddop MapReduce と比べ、インメモリーでは最大 100 倍、ディスク上では 10 倍の速度で動作することが可能になります。Spark を構成しているコンポーネントは以下のとおりです。

  • Spark Core。この基礎となる計算エンジンでは、弾性分散データ・セット (RDD) と呼ばれる基本的なプログラミング抽象化を導入しています。
  • Spark SQL。SQL とドメイン固有言語を使用して構造化データを処理するための DataFrame という新しいデータ抽象化を提供します。
  • MLlib。ビッグデータをマイニングするための分散アルゴリズムを提供する、スケーラブルな機械学習フレームワークです。
  • Streaming。Spark のスケジューリング機能を使用して新しいデータ・ストリームをリアルタイムで分析します。
  • GraphX。グラフ構造データの分析に対応するグラフ処理フレームワークです。

Data Science Experience では、Python、Scala、または R ノートブック用の Spark を使用できます。

DSX には、コミュニティーの貢献によるデータ・サイエンス関連の記事、サンプル・ノートブック、パブリック・データ・セット、各種のチュートリアルなども豊富に用意されていて、これらのリソースを利用して DSX と Apache Spark を簡単に使えるようになっています。

さらに、DSX アカウントでは Object Storage サービスも利用できるようになっています。IBM Cloud 上でフリー・プランとしてプロビジョニングされる、この Object Storage サービスでは、1 つのサービス・インスタンスと最大 5 GB のストレージを無料で利用できます (Object Storage プランはサービスを中断することなくアップグレードできます)。画像やドキュメントなどを含むファイルは、Object Storage サービスが提供する非構造化クラウド・データ・ストアに保管することができます。

要約すると、DSX が提供するソーシャル・コラボレーション環境では、大量のデータ・セットを Object Storage サービスにアップロードし、高速の Apache Spark 計算エンジンを使用して大量の構造化データと非構造化データを効率的に探索、分析、視覚化し、洞察を抽出できます。しかも、簡単かつシームレスに GitHub に接続してノートブックをアップロードしたり、共有したりすることもできます。さらに DSX では、いずれも DSX コミュニティーのメンバーによって作成された、さまざまなノートブック、データ・セット、チュートリアルを簡単に共有して、探求できるようになっています。

このチュートリアルでは DSX の利用方法に焦点を当て、その一例として DSX を使用して Twitter データを分析し、そのデータを Watson Developer Cloud サービスに統合する Python ノートブックを作成します。

Python と Apache Spark を使い始めるには、以下の 2 つのノートブックが参考になります。

https://apsportal.ibm.com/exchange/public/entry/view/972c1d5333a2d12ccdbd2437298e8567

https://apsportal.ibm.com/exchange/public/entry/view/07db16e78e1722931e27c074ebdd5be7

参考までに、Jupyter ノートブックは Web ベースの対話式コンピューティング環境です。Jupyter ノートブックでは対話式でコードを実行して、その計算結果を表示することができます。ノートブックには、データを始めとして、そのデータを処理するためのコード、結果の視覚化機能、ソリューションを文書化して理解を深めるためのテキストとリッチ・メディアに至るまで、データを処理するために必要なすべてのビルディング・ブロックが含まれています。

ソリューションのアーキテクチャー

以下の図に、このソリューションで Twitter からツイートを収集して Cloudant データベースに保存するためのアーキテクチャーを示します。Cloudant データベースは Db2 Warehouse on Cloud ウェアハウスに保存され、そこから Object Storage にインポートされます。DSX 内のノートブックは Object Storage からデータを取り込み、Spark を使用してデータのキュレーション、分析、視覚化を行います。さらに、Watson サービス (Natural Language Understanding と Personality Insights) にも接続して、ツイートを補強し、センチメント、キーワード、ユーザーの性格特性を抽出します。これらの処理が完了すると、ノートブックは Spark MLlib を使用して、性格特性を含む複数の特性に基づいてユーザーをクラスター化します。

アプリケーションではこれらのユーザー・クラスターを基に、特定のユーザーに送信するのに適切なメッセージを特定できます。

データの取り込みと探索

データ取り込み

最初のステップとなるのは常に、関連するデータを取得し、そのデータを理解して正しいフォーマットに変換することです。前述したように、このチュートリアルで収集するソーシャル・メディア・データは、3 人のミュージシャンについて言及している Twitter データ (@katyperry、@justinbieber、および @taylorswift13) です。データを収集した後は、データ探索を行って、それらのデータが表している内容を詳しく把握します。具体的には、スキーマを調べて、データの理解を深めるために視覚化します。その後、データを以降の処理に適切なフォーマットに変換するための前処理を行います。

Twitter データを取得するには、Twitter GNIP をはじめ、さまざまなサード・パーティー・サービスを利用できます。

このチュートリアルでは、Twitter Streaming API を使用して「@katyperry」、「@justinbieber」、または「@taylorswift13」について言及しているツイートを収集し、それらのツイートを処理して対象のメタデータをキャプチャーしてから、Cloudant データベースにツイートを保存します (https://github.com/joe4k/twitterstreams ノートブックを参照)。

Node-RED、Cloudant、Db2 Warehouse on Cloud を使用して Twitter データを収集および保管する際の一般的なアプローチについては、このリンク先の動画を参照してください。

Cloudant データベースを扱う段階にきたら、上述の動画で参照している説明に従って、Cloudant データベース用の Db2 Warehouse on Cloud ウェアハウスを作成します。このチュートリアルに従うには、Db2 Warehouse on Cloud サービス・インスタンスを作成し、「@katyperry」、「@justinbieber」、または「@taylorswift13」について言及しているツイートを収集して、そのインスタンスにそれらのツイートを取り込んでおく必要があります。

すべてのツイートをホストする Cloudant データベース用のウェアハウスとして使用する Db2 Warehouse on Cloud サービス・インスタンスの名前を必ず書き留めておいてください。

データ探索:

ツイートが Db2 Warehouse on Cloud データベース内に収集された状態になったら、以下の手順に従います。

  1. DSX にログインするか、IBM Cloud から DSX を起動します。
  2. 「Data Services (データ・サービス)」をクリックし、「Connections (接続)」を選択します。
  3. 新しい接続を作成するために、「+」記号をクリックします。
  4. 接続名 (dashdbsingers) を入力し、サービス・カテゴリーとして「Data Services (データ・サービス)」を選択します。
    • 「Data Services (データ・サービス)」を選択すると、ご使用のアカウントを使用してプロビジョニングした任意の IBM Cloud データ・サービスに接続できます。
    • 「External (外部)」を選択すると、Amazon S3、Microsoft SQL Server、MySQL、Netezza などの外部データ・サービスに接続できます。他のユーザーの IBM Cloud アカウントを使用して IBM データベース (Cloudant、DB2、Db2 Warehouse on Cloud など) がプロビジョニングされている場合は、「External (外部)」カテゴリーを使用することで、それらのデータベースにも接続できます。
  5. (「データ取り込み」セクションで) Cloudant ウェアハウスとして作成しておいた Db2 Warehouse on Cloud サービス・インスタンスを選択します。
  6. 「BLUDB」データベースを選択してから、「Create (作成)」をクリックします。
  7. 「Projects (プロジェクト)」タブをクリックし、「View All Projects (すべてのプロジェクトを表示)」にナビゲートします。
  8. 新規プロジェクトを作成します。
  9. プロジェクトに「dsxwdc」という名前を付けます。必要に応じて説明を入力することもできます。
  10. プロジェクトに関連付ける Spark サービスとストレージ・タイプを選択します。ドロップダウン・メニューには、自分の Bulemix アカウントを使用してプロビジョニングされている Saprk サービスのリストが表示されます。
  11. 「Overview (概要)」ページにナビゲートして、作成した新規プロジェクトの名前をクリックします。

    これにより、プロジェクトに関連付けられているすべてのノートブック、データ・アセット、ブックマークがロードされますが、このプロジェクトは新しいプロジェクトなのでまだ空の状態です。

  12. 右上隅にある「Find and add data (データを検索して追加)」アイコンをクリックして「Files and Connections (ファイルと接続)」ウィンドウを開きます。
  13. 「Connections (接続)」をクリックし、前に作成した dashdbsingers 接続を見つけます。この接続を選択してから「Apply (適用)」をクリックします。

    これにより、このプロジェクトに属するノートブックで、Db2 Warehouse on Cloud データベース内に保管されているデータにアクセスして使用できるようになります。

  14. ノートブックを追加するために、「add notebooks (ノートブックを追加)」をクリックします。
  15. ノートブックに「twitter_insights_watson_dsx」という名前を付けます。必要に応じて説明を入力することもできます。
  16. 「From URL (コピー元 URL)」を選択し、コピーするノートブックが置かれている URL を指定します。

    ノートブック URL として、https://github.com/joe4k/dsxwdc/blob/master/twitter_insights_watson_dsx.ipynb と指定してください。

ここまでの作業で、DSX 内に新規プロジェクトを作成し、Db2 Warehouse on Cloud サービス・インスタンスへの接続を作成しました。このサービス・インスタンスには、2017 年 7 月 5 日から 12 日までに投稿された、「@katyperry」、「@justinbieber」、または「@taylorswift13」に言及している約 200,000 件のツイートが保管されています。このチュートリアルではツイートの数を制限していますが、実際には数百万件のツイートを収集して分析することができます。

次は、アナリティクスを実行してツイート・データを評価および調査します。

  1. ノートブックのステップ 1 を実行します。これにより、ノートブックを実行するために必要なライブラリーがインストールされます。
  2. Db2 Warehouse on Cloud からデータをロードするステップ 2 を実行します。それには、「Find and Add Data (データを検索して追加)」アイコンをクリックします。

    上記の操作によって開いた「Files and Connections (ファイルと接続)」ウィンドウで、「Connections (接続)」をクリックします。これにより、Db2 Warehouse on Cloud 接続 (dashdbsingers) が表示されるはずです。

    1. 「Insert to code (コードに挿入)」をクリックし、「Insert SparkSession DataFrame (SparkSession DataFrame の挿入)」を選択します。
    2. テーブルとして DSX_CLOUDANT_SINGERS_TWEETS を指定します。

      これにより、Db2 Warehouse on Cloud サービスに接続するために必要な Python コードが作成され、spark.read.jdbc 関数を使用して data_df_1 という名前 (これとは異なる名前の場合もあります) の Spark Dataframe に DSX_CLOUDANT_SINGERS_TWEETS テーブルがロードされます。

    3. 作成された Spark Dataframe data_df_1 を新しいデータフレーム brandTweetsDF にコピーします。
  3. データを探索してキュレートするステップ 3 を実行します。このステップでは、以下の一般的なコマンドが使用されます。
    • brandTweetsDF.limit(2).toPandas()
      使用する Twitter データを把握できるよう、Spark DataFrame 内の先頭 2 行を出力します。toPandas を使用すると、見やすい表形式でデータが出力されます。
    • brandTweetsDF.printSchema()
      予期するフィールドがすべて揃っていることを確認できるよう、Spark DataFrame のスキーマを出力します。
    • brandTweetsDF =brandTweetsDF.drop('_ID','_REV')
      不要な列をドロップします。

    データを処理する関数や、Spark DataFrame にフィールドを追加する関数を作成することもできます。例えば、CREATED_AT フィールドから「作成日」の情報を抽出すれば、一定期間にわたるツイートの傾向グラフを作成できます。

  4. 処理対象として、データのランダム・サンプルを抽出します。実際のソリューションではこのステップを省略し、ノートブックの残りの部分をすべてのデータに適用する必要があります。ここでサンプルを抽出している理由は、データを補強する際に Watson のフリー・プランを適用できるようにするためです。

データ・エンリッチメント

ここまでのところで、関連するツイートを収集して Spark DataFrame に取り込むまでの手順を完了しました。ここからは、Watson Developer Cloud を使用したデータのエンリッチメントに焦点を当てます。

Natural Language Understanding を利用したセンチメントとキーワードによるエンリッチメント

具体的には、Watson Natural Language Understanding サービスを利用して、ツイートからセンチメントとキーワードを抽出します。また、それらのツイートをシェアしたユーザーのパーソナリティー・プロファイルを抽出するために、Watson Personality Insights も利用します。

  1. ノートブックのステップ 5 を実行して Twitter、Natural Language Understanding サービス、Personality Insights サービスそれぞれの資格情報を読み込みます。ノートブックでは、これらの資格情報が JSON ファイル (sample_creds.json) 内に以下のフォーマットで格納されていることを前提としています。

    ステップ 5 には、sample_creds.json ファイルを Object Storage にアップロードして読み込み、資格情報を解析する手順が示されます。

  2. ノートブック内で、Natural Language Understanding サービスを呼び出してツイートからセンチメントとキーワードを抽出するステップ 6 を実行します。このステップでは、Watson Developer Cloud サービス用 Python SDK と、Natural Language Understanding の資格情報を使用します。
    nlu = watson_developer_cloud.NaturalLanguageUnderstandingV1(version=nlu_version,
                                  username=nlu_username,
                                  password=nlu_password)

Natural Language Understanding の資格情報を取得するには、前に説明したように Watson Natural Language Understanding サービスを IBM Cloud 上でプロビジョニングする必要があります。詳細な手順については、このリンク先の Natural Language Understanding チュートリアルの概説を参照してください。

データの視覚化 (センチメントとキーワード)

非構造化データ (ツイート) からセンチメントとキーワードを抽出したら、これらのエンリッチメントを使用してツイートの傾向、センチメント、キーワードを視覚化することができます。この視覚化をブランドごとに個別に行えば、ブランド・マネージャーとマーケティング・チームはブランドに対する消費者知覚の洞察を得ることができます。また、ブランドの間で結果を比較対照することもできます。

ノートブックのステップ 7 を実行して、一定期間にわたるツイートのセンチメントと傾向をグラフに描画します。

ツイートをブランドごとに分けて、ブランド別のセンチメントおよび傾向グラフを作成できるようにします。このようにすると、傾向、センチメント、キーワードを 3 人のミュージシャンの間で比較対照できるようになるからです。

Watson サービスを介して補強した後のデータを使用して作成できる視覚化をいくつか紹介します。

以下の図に、3 人のミュージシャンに対する全体的なセンチメント分布 (肯定的、否定的、中立的) を示します。

各ミュージシャンに関する全ツイートのセンチメント比較を示す円グラフ
各ミュージシャンに関する全ツイートのセンチメント比較を示す円グラフ

以下の図に示されている時系列グラフの一方は、3 つすべてのブランド (ミュージシャン) に関する傾向 (ツイートの数)、もう一方は各ブランドに対する肯定的なツイートの数、否定的なツイートの数、ツイートの合計数を表しています。

3 人のミュージシャンすべてに関するツイートを示すグラフ
3 人のミュージシャンすべてに関するツイートを示すグラフ
3 人のミュージシャンすべてに関するツイートを示すグラフ
3 人のミュージシャンすべてに関するツイートを示すグラフ

以下に図示されているキーワードのワード・クラウドには、ブランドに関するツイートに含まれる、最も関連性の高いキーワードが示されています。

ブランドに関する上位キーワードのワード・クラウド
ブランドに関する上位キーワードのワード・クラウド

Personality Insights を利用したユーザー・パーソナリティーによるエンリッチメント

次は、ツイートをシェアしたユーザーに焦点を当てます。従来のセグメンテーション手法では、投稿したツイートの数やフォロワーの数に基づいてユーザーのクラスターを作成することに重点が置かれますが、このノートブックではユーザーの情報をそのユーザーのパーソナリティー・プロファイルと突き合わせて補強する方法を説明します。こうすることによって、ユーザーのパーソナリティー・プロファイルを考慮に入れた、きめ細かいセグメンテーションが可能になります。

パーソナリティーによるエンリッチメントを行うには、まず、収集したツイートの投稿者である個々のユーザーを識別します。そして Watson Personality Insights を利用して、識別したユーザーのパーソナリティー・プロファイルを、各自が投稿したツイートに基づいて作成します。このチュートリアルでは、USER_SCREEN_NAME に基づいて個々のユーザーを抽出する方法を説明した後、Twitter を使用して各ユーザーのツイートを十分な数だけ収集し、それらのツイートを Personality Insights に渡して、そのユーザーのパーソナリティー・プロファイルを取得する方法を説明します。ここでは分析対象のユーザー数を 100 人に制限していますが、制限したのは単に、このアプローチを説明することが目的であるためです。実際には、すべてのユーザー (あるいは、フォロワー数または投稿数が特定の基準を満たす、すべてのユーザー) のパーソナリティー・プロファイルを作成することになるでしょう。さらに、このリンク先にある Personality Insights の資料で説明しているように、Personality Insights で正確な結果を得るためには、ユーザーごとに十分な数のツイート・サンプルを収集する必要がありますが、このチュートリアルではユーザーあたり 100 件のツイートに制限しています。

ノートブックのステップ 8 を実行します。このステップにより、ユーザーに関する有用な情報 (ツイートの特定のデータ・セットに含まれる個々のユーザー数や、どのユーザーが否定的なセンチメントを表し、どのユーザーが肯定的なセンチメントを表したかなど) を抽出します。このような情報を抽出するには、以下のコマンドを使用できます。

  • df.groupBy('FIELD_NAME'): このコマンドは、特定の FIELD_NAME を基準にレコードをグループ化するのに役立ちます。
  • df.orderBy('FIELD_NAME'): このコマンドは、特定の FIELD_NAME を基準にレコードをランク付けするのに役立ちます。
  • df.where(col('SENTIMENT_LABEL')=="negative"): センチメントが否定的なレコードを抽出するには、このコマンドを使用します。
  • df.where(col('SENTIMENT_LABEL')=="positive"): センチメントが肯定的なレコードを抽出するには、このコマンドを使用します。
  • df.sample(False, fraction, seed): このコマンドは、データからランダム・サンプルを抽出します。

ノートブックのステップ 8 では、扱っているユーザー・サンプルに含まれる個々のユーザーについて、ビッグ 5 性格特性 (OCEAN とも呼ばれます) も抽出します。これら 5 つの性格特性 (開放性、誠実性、外向性、協調性、情緒安定性) は、ユーザーをより深く理解し、それに応じた適切な方法でユーザーに働きかけるのに役立ちます。

ユーザー・セグメンテーションとパーソナライズしたメッセージのための機械学習

ブランドに関連するソーシャル・メディアの投稿を収集して補強した後は、Spark MLlib に用意されているリッチな機械学習アルゴリズムを使用してユーザーをセグメント化できます。

データの準備と K 平均法によるクラスター化

具体的には、K 平均法クラスター化アルゴリズムを使用して、パーソナリティー・プロファイル、フォロワー数、投稿数に基づいてユーザーをグループ化します。性格特性を使用した場合と使用しない場合に作成されるクラスターの違いを明らかにするために、2 つの異なるフィーチャー・セットを使用して K 平均法クラスター化アルゴリズムを実行します。以下に示されているように、一方のフィーチャー・セットには性格特性が含まれ、もう一方には性格特性が含まれていません。

  • FeatureSet 1: (SENTIMENT, USER_FOLLOWERS_COUNT, USER_STATUSES_COUNT)
  • FeatureSet 2: (SENTIMENT, USER_FOLLOWERS_COUNT, USER_STATUSES_COUNT, OPENNESS, CONSCIENTIOUSNESS, EXTRAVERSION, AGREEABLENESS, NEUROTICISM)

ノートブックのステップ 9 を実行し、データを適切なフォーマットに変換してから、K 平均法アルゴリズムを実行してユーザーをクラスター化します。このステップで役立つコマンドを以下に記載します。

列をベクトルに変換します。

assembler_field = VectorAssembler( inputCols=["FIELD_NAME"], outputCol="vector_field_name")
assembled_field = assembler_field.transform(df)
assembled_field = assembled_field.select("FIELD_NAME_1","FIELD_NAME","vector_field_name")

MinMaxScaler を使用してフィールドをスケーリングします。

scaler_field = MinMaxScaler(inputCol="vector_field_name", outputCol="scaled_field_name")
scalerModel_field = scaler_field.fit(assembled_field)
scaledData_field = scalerModel_field.transform(assembled_field)
df_scaled=scaledData_field.select(("FIELD_NAME_1","scaled_field_name)

クラスター化に使用する特定のフィーチャーを選択し、ベクトルにマッピングします。

df _noPI = df_scaled.select('SENTIMENT','SCALED_USER_FOLLOWERS_COUNT','SCALED_USER_STATUSES_COUNT')
df _wPI = df_scaled.select('SENTIMENT','SCALED_USER_FOLLOWERS_COUNT', 'SCALED_USER_STATUSES_COUNT', \
		            'OPENNESS', 'CONSCIENTIOUSNESS','EXTRAVERSION', 'AGREEABLENESS','NEUROTICISM')
from pyspark.mllib.linalg import Vectors
df_noPI = df_noPI.rdd.map(lambda x: Vectors.dense([c for c in x]))
df_wPI = df_wPI.rdd.map(lambda x: Vectors.dense([c for c in x]))

K 平均法アルゴリズムを使用して (ベース・フィーチャーと PI_ENRICHED フィーチャーに基づく) クラスターを作成します。

pyspark.ml.clustering から KMeans をインポートします。

## モデル・パラメーターを定義し、シードを設定する

baseKMeans = KMeans(featuresCol = "BASE_FEATURES", predictionCol = "BASE_PREDICTIONS").setK(5).setSeed(206)
piKMeans = KMeans(featuresCol = "PI_ENRICHED_FEATURES", predictionCol = "PI_PREDICTIONS").setK(5).setSeed(206)

## モデルをフィーチャーのベクトルに適合させる

baseClustersFit = baseKMeans.fit(userPersonalityDF.select("BASE_FEATURES"))
enrichedClustersFit = piKMeans.fit(userPersonalityDF.select("PI_ENRICHED_FEATURES"))

## 各ユーザーのクラスター ID を取得する

userPersonalityDF = baseClustersFit.transform(userPersonalityDF)
userPersonalityDF = enrichedClustersFit.transform(userPersonalityDF)

データ視覚化 (性格特性を使用した場合と使用しない場合のユーザー・クラスター)

構造化メタデータ (フォロワーの数、投稿数など) に基づくユーザー・クラスターと、非構造化データから抽出して補強したメタデータ (ツイートのセンチメント、ユーザーの性格特性など) に基づくユーザー・クラスターの両方を作成した後は、この 2 つのセグメンテーション・ソリューションの間の違いを理解するために視覚化を実行します。

最も単純なレベルで結果が異なることを明らかにするために、性格特性を使用しないシナリオと使用したシナリオでのそれぞれのクラスターに含まれるユーザー数を示す円グラフを描画します。

ノートブックのステップ 10 を実行して、性格特性を使用しないシナリオと、Personality Insights を介して抽出した性格特性を使用したシナリオの両方で、K 平均法クラスター化ソリューションのグラフを作成して表示します。

以下の図に示す円グラフには、性格特性を使用したクラスターと使用しないクラスターのそれぞれに含まれるユーザー数が示されています。これは、性格特性を含めるとクラスター化ソリューションが変わってくることを示す、非常に単純な視覚化です。

性格特性を使用しない場合と使用した場合のクラスターのグループ化
性格特性を使用しない場合と使用した場合のクラスターのグループ化

通常、クラスターを視覚化するには、データの何らかの集約基準を描画してから、クラスター ID 別に色分けしたデータ・ポイントを入力します。ただし、集約指標がない場合は、主成分分析 (PCA) を使用してデータ・セットを 2 つの次元に集約するという方法を使えます。ここでは PCA を実行した後、2 つのコンポーネントの値を X 軸上と Y 軸上に描画することで、散布図を作成できます。以下の図に、ベース・フィーチャーだけを使用したクラスター化の結果 (図 1) と、ベース・フィーチャーと性格特性の両方を使用したクラスター化の結果 (図 2) を示します。皆さんが実行するクラスター化の結果は、この図に示す通りにはならない可能性があります。

ベース・フィーチャーだけを使用したクラスター化の結果
ベース・フィーチャーだけを使用したクラスター化の結果
ベース・フィーチャーと性格特性を使用したクラスター化の結果
ベース・フィーチャーと性格特性を使用したクラスター化の結果

これらのユーザー・クラスターを基に、ブランド・マネージャーやマーケティング・チームはパーソナライズしたメッセージを作成してユーザーに働きかけることができます。また、長期間にわたってユーザー・クラスターを追跡することで、購入履歴、クリック・パターン、あるいはさまざまな広告キャンペーンに対する反応などといった各種のメトリックにユーザーがどのように反応するのかを調べることもできます。

まとめ

このチュートリアルでは、データを取得するところから、データのキュレートとクレンジングを行い、データを分析、視覚化、補強してデータから価値を引き出すまでの一連のプロセスを説明しました。チュートリアルで用いたサンプル・シナリオの場合、データの価値は、消費者のパーソナリティーとソーシャル・メディア・プレゼンスを理解して、よりパーソナライズしたメッセージを配信できることにあります。この分析では量を制限したサンプル・データを使用しましたが、チュートリアルで参照したテクノロジー (DSX、Spark、Object Storage) はスケーリングしてビッグデータを効率的に処理することができます。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=ビジネス・アナリティクス, Cognitive computing
ArticleID=1059456
ArticleTitle=Data Science Experience 内で Watson と Spark を利用して、ソーシャル・メディアの投稿から洞察を引き出す
publish-date=04122018