
こんにちは、STORES でデータアナリストをしているsueshigeです。
STORES では2025/3から従来のプロダクト単位の料金プランとは大きく異なる複数プロダクトをまとめた新料金プランの提供を開始しました。 料金プランを決定するにあたり月額料金と決済手数料を合わせて値決めをするのは難しい問題で、インプット項目の集計からシミュレーションまでをスプレッドシートなどを使って人力で行う方法には限界がありました。そこでクエリを用いることで値決めのシミュレーションを効率的に行うことができたのでその方法を共有します。
シミュレーション方法
プロダクトの値決めで重要となるのは新しい料金体系をいくらに設定するかと、新しい料金体系にしたときと現状の差分であることが多いため、これら2つに関して柔軟な対応ができるような工夫をしました。
説明の簡便化のため1プロダクト(具体的には決済プロダクト)に限定したシミュレーション用クエリを以下に示しました。ポイントは、シミュレーションの要となる月額料金(sim_plan_fee)、取引手数料率(sim_fee_percentage)、取引原価率(sim_tran_cost)についてcross joinで様々なバリエーションをユーザ単位(今回はshop_id)で用意することで、複数の料金体系を同時かつユーザ単位でシミュレーションすることが可能になっています。なお、取引原価率は内部情報のためクエリ上は取引手数料率と同じにしています。
SELECT shop_id, record_month, category, sim_plan_fee, sim_fee_percentage, sim_tran_cost, gmv * sim_fee_percentage AS sim_fee, gmv * sim_tran_cost AS sim_cost, gmv * sim_fee_percentage + sim_plan_fee AS sim_total_fee, gmv * sim_fee_percentage + sim_plan_fee - fee AS sim_diff_total_fee, gmv * (sim_fee_percentage - sim_tran_cost) + sim_plan_fee AS sim_gross_profit, gmv * (sim_fee_percentage - sim_tran_cost) + sim_plan_fee - gross_profit AS sim_diff_gross_profit, FROM `mart_payments.monthly_shop_fee_summary` CROSS JOIN UNNEST([0, 1000,2000,3000,4000]) AS sim_plan_fee CROSS JOIN UNNEST([0.02, 0.0198, 0.019, 0.018]) AS sim_fee_percentage CROSS JOIN UNNEST([0.02, 0.0198, 0.019, 0.018]) AS sim_tran_cost JOIN `mart_payments.shops` USING(shop_id)
上記クエリは決済プロダクトを想定した1プロダクト用のクエリとなっていますが、cross joinを用いてプロダクト数分のシミュレーション用変数を用意することで複数プロダクトを合わせた値決めのシミュレーションも簡単に行うことができます。
可視化
クエリを用いて上記データを用意するメリットの一つに、dashboardとシミュレーションデータを連携させることで様々な料金体系の財務インパクトを誰でも簡単に確認することができるという点があげられます。
具体例として下図に決済プロダクトを対象としたシミュレーションの可視化用dashboardを示しました。上記クエリで使用したシミュレーション用変数である月額料金(sim_plan_fee)、取引手数料率(sim_fee_percentage)、取引原価率(sim_tran_cost)がそれぞれインプットとして変更できるようになっており、例えば取引手数料率がどの水準までであれば粗利インパクトが抑えられるのか、取引手数料率を下げた売上のマイナスをカバーするには月額料金がいくらであれば良いか、といった分析を誰でも簡単に確認できるようになります。
また、今回のシミュレーションはユーザ単位で行なっているため、例えば業種などユーザに紐づく単位でグルーピングを行い業種別の財務インパクトを集計することもできます。プロダクトの使われ方は業種により大きく異なるケースもあるので、このような分析を事前に行うことでマーケティング活動などへの援用も可能となります。

まとめ
プロダクトの値決めは経営にまつわる事項であるため、客観的なデータを用いた事前分析が極めて重要になります。一方で、シミュレーションに必要なデータは膨大であるため人力でデータ集計を行うには作業が複雑すぎることも多いです。このような限界がある中で、今回の記事ではクエリを用いることで人力によるデータ集計やシミュレーションを避けつつ効率的に値決めに関するシミュレーションをする方法を紹介しました。ポイントとなるのはユーザ単位でシミュレーション用変数をcross joinしてデータを作成するところだけなので、様々なタイプのシミュレーションに応用していくことが可能な構成となっています。
STORES ではデータアナリストを募集しています。 カジュアル面談も実施していますので少しでも興味を持ってくださった方、ぜひ応募してみてください。