SPSS Modeler ヒモトク

第6回 応用編:価格弾力性の分析 – IBM SPSS Modelerスクリプトによる分析作業の効率化

記事をシェアする:

価格弾力性の分析(BigData、ループ処理+リストのパラメータ展開)

価格弾力性とは、モノやサービスに価格をつける場合、いくらにすると需要がどう変わるか、価格の変化が需要にどの程度影響を与えるかを示すもので す。弾力性を定量化する際は、「価格弾力性=需要の変化率/価格の変化率」で表されます。例えば、10%値上がりすると需要が5%減少という場合、価格弾 力性は0.5となります。1より大きいと弾力性は大きく、価格の変化によって需要が大きく変わりますし、1より小さければ弾力性は小さく、価格が変わって も需要への影響は小さいことになります。通常、日常品は弾力性が小さく、宝飾品などの贅沢品は弾力性が大きいと言われています。

需要を増やすために価格を変えるケース、ここではオンラインショップでのセールを考えてみます。効果的なセールを実施するには、セール対象品の適切 な割引率を知ることが重要な点の1つです。必要以上に値下げし過ぎていないかチェックしたり、需要がどの程度増えるか予測することで、利益の予測精度をよ り高めることにも繋がります。

特にオンラインショップの場合は、ユーザーのアクセスログを分析することで、商品ページにアクセスしたユーザーが商品を購入したか、閲覧しただけで購入しなかったかがわかります。この情報を利用すると、アクセスユーザーの購入率を○%UPするには△%の割引が効果的、というガイドラインの作成にも役立ちそうです。

通常、セール期間中に値下げ対象となる商品は複数ありますから、分析では商品毎に同じ処理を繰り返すことになります。そこで今回は、商品毎に価格弾力性を求めて結果を出力するループ処理をスクリプトで実現させます。


処理概要

今回の処理では、セール対象品5品に対して商品毎に価格弾力性を求めるモデルを作成し、購入率と割引率の相関を結果をファイルとして保存します。 データ加工処理とモデルの当てはめ処理はいずれも共通ですので、スクリプトでループ処理を使用します。さらに、商品毎のモデル作成と結果出力では、条件抽 出ノードで設定する対象商品を変更するために、商品リストをパラメータ展開する処理を行います。また、モデルナゲットの挿入と削除もループ処理に含めま す。


1. ストリーム&スクリプト:モデル構築

最初に、モデル構築フローを作成します。オンラインショップ利用者のデータを読み込みます。ここに購入有無フラグを追加します。商品毎にモデルを作 成するため、スクリプトで対象となる商品名の変数を定義し、条件抽出ノード「商品抽出1」に設定します。商品名は、商品名リストから読み込みます。スクリ プトでテーブルノード「商品名」を実行し、1行毎にスクリプトのパラメータに展開するように記述します(3章または6章参照)。

価格弾力性の分析では、重回帰分析が使われることが多くありますので、ここでも使用します。IBM SPSS Modelerではモデル作成ノード「線形回帰」を使用します(*)。

spssmodeler_fig06-01


2. ストリーム&スクリプト:結果出力

次に、モデルを適用した結果出力フローを作成します。今回は、シュミレーション用データを「ユーザー入力」ノードで作成します。「商品抽出1」と同 様にスクリプトを使って、対象商品を条件抽出ノード「商品抽出2」に設定します。そして、「商品抽出2」と「テーブル」の間に、上記フローで作成されたモ デルナゲットを挿入して出力結果をファイルに保存し、挿入したモデルを削除する、という処理を繰り返します。「グラフボード」も同様です。モデルナゲット はスクリプト内で作成しますので、テーブルノードとグラフノードのみを配置しておきます。

spssmodeler_fig06-02

spssmodeler_fig06-03

スクリプトは下記の通りです。

/* 変数宣言 */
var p
var last_row
var item_name
var file_name

execute ‘商品名’ /*後続の「商品名:tablenode.output」処理が有効になる*/

set last_row= 商品名:tablenode.output.row_count – 1
set p=0
for p from 0 to ^last_row
set p=^p+1

set item_name = value 商品名:tablenode.output at ^p 1 /* 1列目(商品名)の1行目以降を参照 */

set 商品抽出1:selectnode{
mode = Include
condition = “商品分類名='” >< ^item_name ><“‘”
}

execute ‘購入率’:regressionnode /* モデルを作成 */

/* テーブル作成・保存 */
insert model 購入率:regression connected between 商品抽出2 and テーブル /* モデルを挿入 */

set テーブル:tablenode{
output_mode = File
full_filename = “C:/temp/table_” >< ^item_name >< “.csv”
}

execute ‘テーブル’
delete last model /* 現在のスクリプトによって挿入された最後のモデルを削除 */

/* グラフ作成・保存 */
insert model 購入率:regression connected between 商品抽出2 and グラフボード /* モデルを挿入 */

set グラフボード:graphboardnode{
graph_type = Dotplot
output_mode = File
full_filename = “C:/temp/graph_” >< ^item_name >< “.cou”
x_field = ‘$E-購入率’
y_field = ‘割引率’
}

execute ‘グラフボード’
delete last model /* 現在のスクリプトによって挿入された最後のモデルを削除 */

endfor

clear outputs   /* テーブルアウトプットを削除 */

ここで行った価格弾力性の分析は、商品価格を変更した場合の効果や、他の商品への影響を定量的に把握する際にも適用できます。

また、アクセスログのようなBigDataもスクリプトを使うことで、より有効活用しやすくなります。

さらに、別途サーバー製品「IBM SPSS Collaboration and Deployment Services」を導入すれば、商品別に作成した複数のモデルをレポジトリに保存できますので、オンラインショップのセール企画時に更新して再利用した り、セール後の精度検証にも便利です。


* 価格弾力性の分析手法について

今回は単回帰で値引きが及ぼす商品への購入反応が線型であることを仮定し、複数の商品に充当させるべくスクリプトを用いました。

しかし、実際には価格反応が線形であることは稀で、商品やサービス、チャネルによって様々な曲線を描くことが過去の研究から知られています。そのた め、実際の分析では、IBM SPSSで曲線推定やニューラルネットワークによる複雑な反応カーブを当てはめることで、商品毎の価格シミュレーションを高度化することが可能です。

More SPSS Modeler ヒモトク stories

データ分析者達の教訓 #16- ステークホルダーの高い期待を使命感と創意工夫で乗り越えろ

Data Science and AI, SPSS Modeler ヒモトク, アナリティクス...

  皆さんこんにちは。IBMの坂本です。 SPSSを含むデータサイエンス製品の技術を担当しています。 このリレー連載ブログはSPSS Modelerの実際のユーザーで第一線で活躍するデータ分析者に、データ活用を ...続きを読む


データ分析者達の教訓 #15- データ分析は手段と割り切り情熱をもって目標に進め

Data Science and AI, SPSS Modeler ヒモトク, アナリティクス...

  皆さんこんにちはIBMの河田です。SPSSを含むデータサイエンス製品の技術を担当しています。 このリレー連載ブログはSPSS Modelerの実際のユーザーで第一線で活躍するデータ分析者に、データ活用を進め ...続きを読む


データ分析者達の教訓 #14- データから導かれる「あたりまえ」を丁寧に見つめ直す

Data Science and AI, SPSS Modeler ヒモトク, アナリティクス...

  皆さん、はじめまして。 昨年末にIBM にJoinし、Data&AIでデータサイエンスTech Salesをしている宮園と申します。   このリレー連載ブログはSPSS Modelerの実 ...続きを読む