CData Software Blog

クラウド連携のCData Software の技術ブログです。

データサイエンティストが開発したプログラミング不要の分析ツールnehanでSalesforce 商談データの勝率を予測してみた

はじめに

CData Japan技術ディレクターの桑島です。本記事では、nehanSalesforce Sales Cloudの商談データを取り込み、各商談の勝率を予測する方法をご紹介します。

f:id:kuwazzy:20191203131050p:plain

本記事の構成は以下の通りです。

nehan とは

f:id:kuwazzy:20191202194706p:plain

nehanは、データサイエンティストが開発したプログラミング不要の分析ツールです。データの前処理から予測モデルの構築・運用、可視化・他システムへの連携までといったデータ分析にまつわる作業を一つのプラットフォームで行える特徴を持っています。nehanは、現在(2019/12時点)以下のデータタイプからデータをインポートすることができます。

前提

本手順では以下のプロダクトを利用します。

以下の手順では、Salesforce、および、nehanのアカウントを取得済みであること、RDSなどのnehanからアクセス可能なPostgreSQLデータベース環境を既に保有している前提での手順となります。CData Syncは今回ローカルのWindowsマシンに構築しましたが、Mac/Linuxで動作するJavaエディション、既にCDatsa SyncがセットアップされているAMIイメージもご利用いただけます。

手順

CData Sync

概要

本手順では Salesforce にある商談(Opportunity)のデータをPostgreSQLにSyncします。

f:id:kuwazzy:20191203101716p:plain

なお、Salesforceの商談データは、商談名、取引先名、金額、フェーズ、勝敗、商談所有者(担当者)といった項目から構成されています。

f:id:kuwazzy:20191202195849p:plain

CData Sync製品のインストール

f:id:sennanvolar44:20191124205824p:plain
最初にCData Sync をダウンロードします。こちらからダウンロードページを表示してください。

右上にダウンロードボタンがありますのでクリックします。
f:id:sennanvolar44:20191126101444p:plain

今回はWinowsマシンのため、左側のWindowsマーク配下の「DOWNLOAD NOW」をクリックします。
f:id:sennanvolar44:20191126101616p:plain

Eメールを入力し、ダウンロードボタンをクリックします。 f:id:sennanvolar44:20191202154126p:plain

そうしますと、 CDataSync.exe がダウンロードフォルダに入ってきますので、ダブルクリックしてインストールを開始します。
f:id:sennanvolar44:20191124210517p:plain

ライセンス契約書を確認後、次に進みます。
f:id:sennanvolar44:20191124210613p:plain

インストール先も支障がなければデフォルトのまま進みます。
f:id:sennanvolar44:20191124210808p:plain

デフォルトのまま次へ進みます。 f:id:sennanvolar44:20191124211009p:plain

デフォルトのまま次へ進みます。 f:id:sennanvolar44:20191124211108p:plain

CDataSync にログインする際のパスワードを設定します。今回は「password」で設定します。
f:id:sennanvolar44:20191124220922p:plain

ここまででインストールの準備が完了です。インストールボタンをクリックしてインストールを開始します。
f:id:sennanvolar44:20191124211132p:plain

以下の画面が表示されますと、インストールが完了となります。チェックボックスにチェックをつけたまま完了ボタンをクリックすることで、CDataSyncが起動されます。 f:id:sennanvolar44:20191124211259p:plain

起動するとWindowsのステータスバーにCData Sync のアイコンがこのように表示されます。
f:id:sennanvolar44:20191124215829p:plain

ライセンスのアクティベーション

CData Sync にログイン後、ヘッダーの情報タブをクリックします。今回は赤枠の「評価版をアクティベート」をクリックします。
f:id:sennanvolar44:20191124221252p:plain

名前・Eメール、ソフトウェア使用許諾契約書にチェックを入れ、「評価版をアクティベートする」をクリックします。 f:id:sennanvolar44:20191202154649p:plain

アクティベートが完了すると、赤枠のようにライセンスの種類、プロダクトキーに値がセットされます。なお、評価版は30日間まで無料でご利用いただけます。 f:id:sennanvolar44:20191124221855p:plain

Salesforce へのコネクションを作成

ヘッダーで「接続」をクリックし、以下の画面で Salesforce のアイコンをクリックします。
f:id:sennanvolar44:20191124231116p:plain

Salesfroce へのコネクションの設定画面が表示されるので、名前を任意の名称(例:Salesforce)に変更して、User、Password、SecurityTokenを設定して、「接続のテスト」ボタンをクリックします。上段に「接続に成功しました。」のメッセージが出たら成功です。「変更を保存」ボタンをクリックして作成したコネクション情報を保存してください。

f:id:sennanvolar44:20191202154836p:plain

PostgreSQL へのコネクションを作成

Salesforce の接続設定と同じように接続設定画面を表示させ、同期先タブをクリック後、PostgreSQLを選択します。
f:id:kuwazzy:20191202200651p:plain

PostgreSQLへのコネクションの設定画面が表示されるので、以下の内容で入力してください。入力後、「接続のテスト」をクリックし接続が成功しましたら、右上の「変更を保存」をクリックして接続情報を保存します。

  • 名前:Postgres
  • フォーマット設定:プロパティリスト
  • Server : データベースのIPアドレス、もしくは、マシン名
  • Port : 接続ポート(PostgreSQLデフォルトは、5432)
  • Database : データベース名
  • User : ユーザID
  • Password : ユーザのパスワード

f:id:kuwazzy:20191202201221p:plain

ジョブの作成

ヘッダーの「ジョブ」を選択後、右側にあります「ジョブを追加」をクリックします。
f:id:sennanvolar44:20191125103002p:plain

以下の画面が表示されますので、ジョブ名、ソース、同期先を入力したら「作成」をクリックします。

  • ジョブ名:SalesforceToPostgreSQL
  • ソース:Salesforceを選択
  • 同期先:PostgreSQLを選択

f:id:kuwazzy:20191202201423p:plain

次に、Salesforce内のテーブル(オブジェクト)を選択するために「+テーブルを追加」をクリックします。

f:id:kuwazzy:20191202201550p:plain

Salesforce内のテーブル(オブジェクト)リストが表示されるので、今回は、商談であるOpportunityを選択して、「+選択したテーブルを追加」をクリックします。

f:id:kuwazzy:20191202201651p:plain

テーブルとクエリに自動的にOpportunityテーブルを同期する内容が設定されました。ここでいう"テーブル" と書いてある箇所は同期先に作成するテーブル名(ファイル名)となります。"クエリ" はどういう内容で Salesforce からデータを抽出するかという意味になります。REPLICATE とは Opportunity テーブル内容をそのまま同期することを意味しています。ジョブ内容の確認が終わりましたら、右上にある「変更を保存」をクリックし、ジョブを保存します。以上でジョブの作成が完了です。
f:id:kuwazzy:20191202201809p:plain

ジョブの実行

それでは、アドホックSalesforceのテーブルのSyncを実行してみます。上記手順で作成したジョブのチェックボックスをチェックし、実行ボタンをクリックします。しばらくたつと、上部に薄緑のメッセージボックスで「ジョブ[ジョブ名] は正常に完了しました。Records affected: XX ・・・」といったメッセージが表示されれば成功です。

f:id:kuwazzy:20191202202312p:plain

PostgreSQLに同期した商談(Opportunity)データを確認

PostgreSQLのデータベースに正しくデータが同期されたかを確認するため、PgAdminなどのツールでPostgreSQLのデータを参照します。データベース内にopportunity テーブルが作成されてデータが格納されていればPostgreSQLへのsyncは成功です。 f:id:kuwazzy:20191202202754p:plain

nehan

概要

それでは、PostgreSQLにSyncしたSalesforceの商談(Opportunity)データを利用して、nehan で作成した予測モデルで勝率を予測してみましょう。

f:id:kuwazzy:20191203130201p:plain

SQLビルダーを利用したデータソースの作成

左側のメニューより「SQLビルダー」を選択して、右上の「ビルダープロジェクトの新規作成」をクリックします。

f:id:kuwazzy:20191202204041p:plain

ビルダープロジェクトの作成準備ウィザードにてPostgreSQLを選択して次へ進みます。

f:id:kuwazzy:20191202204213p:plain

PostgreSQLへの接続情報をセットします。

f:id:kuwazzy:20191202204507p:plain

任意のビルダープロジェクト名(本例では、SalesforceOpportunity)を付与して作成します。

f:id:kuwazzy:20191202205652p:plain

SQLビルダー画面が起動するので、左側の一覧から「テーブルを選択する」をクリックして「Opportunity」テーブルを選択して「テーブルを読み込む」ボタンをクリックします。左下の「処理後のデータ」にOpportunityテーブルの内容がプレビューされます。

f:id:kuwazzy:20191202205920p:plain

「データソースに登録する」の処理をクリックして、作成したSQLを元にしたデータソース を登録します。登録すると検証が実行され、正しく登録されると「データソースに登録」処理も緑になります。

f:id:kuwazzy:20191203102109p:plain

作成したデータソースは左側のメニューの「データソース 」から確認できます。

f:id:kuwazzy:20191202212103p:plain

予測モデルを作成

作成したデータソース を使用して分析プロジェクトを作成していきます。左側メニューの「データを分析する」を選択して右上の「分析プロジェクトの新規作成」をクリックします。任意のプロジェクト名(本例では「商談予測」)を付与して「作成して開始」をクリックします。 f:id:kuwazzy:20191202212008p:plain

分析プロジェクトの画面が立ち上がります。左側のメニューから「分析するデータを配置する」を選択します。

f:id:kuwazzy:20191202212614p:plain

データソース の選択にて先の手順でSQLビルダーで作成したデータソース を選択します。

f:id:kuwazzy:20191202212806p:plain

「データソースの読み込み」エリアにPostgreSQLに発行するSQLが表示されます。正しく読み込まれると左下に読み込んだデータのプレビューが表示されます。

f:id:kuwazzy:20191203102355p:plain

今回教師データには商談がクローズ済みのレコードのみを対象とするため「条件で行をフィルタ」を選択して「#IsClosed = 1」の条件で絞り込みます。

f:id:kuwazzy:20191203102720p:plain

上記抽出結果を入力として説明変数として利用する項目からダミー変数を作成します。今回は、「Type(種類)」「LeadSource(主キャンペーンソース)」「Opportunity_Source_c(商談ソース)」を選択しました。ダミー変数が作成されると「項目名値」の項目が追加されて「0,1」の値がセットされます。

f:id:kuwazzy:20191203103353p:plain

データの前処理ができたので、「機械学習」>「教師あり学習」内の「Randam Forest」を使用して予測モデルを作成します。予測値の種類には「連続値」、目的変数には今回はクローズした商談が「IsWon(勝敗)」を選択します。説明変数には、上記、ダミー変数で追加された「Type」「LeadSource」「Opportunity_Source_」から始まる項目を選択します。この設定で「実行」すると右下の処理後のデータに各説明変数毎の影響度が「#importance」列に表示されます。本例だと「Opportunity_source__c_Marketing」が最も「IsWon(勝敗)」に影響を及ぼしていることが分かります。

f:id:kuwazzy:20191203104709p:plain

モデルで予測値を算出

それでは、この予測モデルを使って、まだクローズ前の商談データの勝率を予測してみましょう。まず、教師データと同じデータソースをもとに「条件で行をフィルタ」を利用して「#IsClosed = 0(クローズ前)」で絞り込みます。実行すると右下の処理後のデータには「#IsClosed = 0(クローズ前)」のデータのみが表示されます。

f:id:kuwazzy:20191203105748p:plain

教師データと同様に「Type(種類)」「LeadSource(主キャンペーンソース)」「Opportunity_Source__c(商談ソース)」を選択してダミー変数を作成します。

f:id:kuwazzy:20191203110413p:plain

機械学習」>「教師あり学習による予測」>「モデルで予測値算出」を選択して教師データの「RandamForest」と予測データの「ダミー変数の作成」からフローをつなぎます。実行すると右下の処理後のデータの末尾列に「#predict」列が追加されます。本カラムに、各商談毎の勝率が格納されます。

f:id:kuwazzy:20191203110719p:plain

予測結果をもとに「列選択」を選択して「Id」と「Predict」列のみを抽出します。

f:id:kuwazzy:20191203112450p:plain

データプレビューの画面でみてみると本画面の例では1行目の商談の勝率は「0.861154」=「86.1%」という予測結果がでました。

f:id:kuwazzy:20191203131629p:plain

f:id:kuwazzy:20191203131405p:plain

予測値の分布を把握するためにビジュアライズからヒストグラムを作成してみます。

f:id:kuwazzy:20191203112711p:plain

タイプに「ヒストグラム」、x軸に「predict」を選択することで勝率の分布を可視化することができました。

f:id:kuwazzy:20191203112623p:plain

まとめ

本記事では、Salesforce内の商談データをもとにnehan で勝率を予測してみました。実際のユースケースとしては、この勝率データをもとに、より精度の高い収益予想や、商談のアプローチの見直しに活用出来ると思います。今回は、CData Syncを用いてnehanがサポートしているPostgreSQLにデータを取り込むことでデータを連携することができました。CData Syncは、Salesforce以外にも100を超えるデータソースに対応しているので同様の方式で、Salesforce以外のCRMやMA、ERPなど様々なデータをnehanに取り込み分析することが可能となります。

f:id:kuwazzy:20191203114121p:plain CData Syncで取り込めるデータソース 一覧

nehan および、CData Syncは評価版環境を準備しておりますので是非お試しください。