MixpanelのデータをChatGPTにAPI連携して仮説立てをさせてみる

MixpanelのデータをOpenAIのAPIに連携させる初歩手順。
2023.03.30

ミックスパネラーの國崎です。
今回は「Mixpanelと今流行りのChatGPTをAPIで連携して仮説立てしてもらったら面白そうやん」と思ったりしたので実際に試してみました。

3行まとめ

  • MixpanelのデータをAPIで取得できるようにする
  • Open AIのAPIを使って取得したデータを基に仮説立てさせる
  • 結果を見てムフフする

前提としてはMixpanelを既に使っていてかつ、Open AIのAPIを扱える方が対象となります。
WEB版のChatGPTに入力して使うのではなく、あくまでAPIでの連携をしてやってみた記事になるので、そのあたりご承知おきください。

Mixpanelのデータを準備

まず仮説立てしてほしいMixpanelのデータを準備します。
ここでいうMixpanelのデータはMixpanelで保存したレポートのデータになります。

今回はMixpanelのインサイトレポートのデータを使います。
以下が用意したデータ「あるECアプリの商品カテゴリ別購買ユーザー数(週次)」になります。
chatmixpanel1

上記のレポートを作成したらダッシュボードに保存します。
保存は右上のSaveで行います。
chatmixpanel2

ダッシュボードに保存し終わるとURLが発行されます。
この時URLで以下のようにreportに紐づいている数字が当レポートのbookmark_IDとなります。

report-38309811

workspace_idは以下のようにviewとappの間の数字です。

view/3455464/app/

Mixoanelのインサイトレポート用のQuery APIを使い、データを外部でも取得できるようにします。
Query APIを使う際は、以下が必要となります。

  • project_id
  • workspace_id(任意)
  • bookmark_id
  • AUTHENTICATION(サービスアカウント or APIシークレットキー)

Query APIページ内でのTry It!をクリックして、以下のように書き出しができれば成功です。
chatmixpanel3

上のデータを取得するための以下pythonコードも書き出されました。

import requests

# project_id,workspace_id,bookmark_idには各指定のIDを記入
url = "https://mixpanel.com/api/2.0/insights?project_id=$project_id&workspace_id=$workspace_id&bookmark_id=$bookmark_id"

headers = {
    "accept": "application/json",
    "authorization": "Basic 認証キー"
}

response = requests.get(url, headers=headers)

print(response.text)

これでMixpanelからデータを取得するpythonコードがわかったので、次にOpen AIのapiと連携させます。

PythonでOpen AIのAPIにデータを読み込ませる

PythonはGoogle Colaboratoryの環境を使います。
事前にOpen AIのインストールはしておきます。

!pip install openai

Mixpanelから書き出されたコードに加え、Open AIのAPIキー、APIリクエストの実行文を以下のように追記します。

import openai
import json
import requests

# project_id,workspace_id,bookmark_idには各指定のIDを記入
url = "https://mixpanel.com/api/2.0/insights?project_id=$project_id&workspace_id=$workspace_id&bookmark_id=$bookmark_id"

headers = {
    "accept": "application/json",
    "authorization": "Basic 認証キー"
}

response = requests.get(url, headers=headers)
# APIキーの設定
openai.api_key = "Open AIのAPIキー"

# 整形済みデータ(JSON形式)の例
data = [response.text]

# データを文字列に変換
data_str = json.dumps(data)

# OpenAI APIにデータを渡すプロンプトを作成
prompt = f"ECアプリの運用をしています。次のMixpanelのデータからどのような仮説立てができるか教えてください。 insights:\n{data_str}\n\nInsights: "

# APIリクエストを実行
response_ai = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "あなたはMixpanelのデータを分析し仮説立てをするAIアシスタントです"},
        {"role": "user", "content": prompt}
    ],
    max_tokens=500,
    temperature=0.5,
)

# 結果を表示
print(response_ai['choices'][0]['message']['content'].strip())

変数promptに質問とMixpanelの取得データを入れています。
max_tokensでAPIから書き出される文字数の調整もできます。

データを基に生成された仮説

上記の記述から出された仮説が以下になります。

このデータから得られる仮説は以下の通りです。

- 期間内に完了した購入の総数は3014件であることがわかります。
これはECアプリの売上に直結するため、売上の伸びを見込める可能性があります。
- カテゴリー別に見ると、Clothing、Jewelry & Watches、Industrialが上位にランクインしています。
これらのカテゴリーにフォーカスすることで、より多くの顧客を獲得することができるかもしれません。
- 一方で、Homeカテゴリーは他のカテゴリーに比べて売上が低いことがわかります。
このカテゴリーについては、商品ラインナップやマーケティング戦略を見直す必要があるかもしれません。
- 各カテゴリーの売上比率を見ることで、ECアプリの商品ラインナップの傾向がわかります。
これを踏まえて、商品のカテゴリー分けや新商品の開発を検討することができます。

「思ったよりも、ちゃんとした内容が返ってきた」と個人的には思ったのですが、いかがでしょうか。
今回与えたデータが「商品カテゴリ別購買ユーザー数」なので、普通にマーケティングをしている方からすると「他にもデータくれや!」となりそうなところですが、Open AI(ChatGPT)は健気に返してるのが、「ちゃんとしてるなぁ」と少し感心してしまいました。

ちなみにOpen AIにあまりに大量のデータを与えると、以下のようにエラーが出ます。

InvalidRequestError: This model's maximum context length is 4097 tokens. However, your messages resulted in 2114821 tokens. Please reduce the length of the messages.

より高度な分析となると、与えるデータも必然的に多くなると思いますが、その場合はデータの整形など工夫が必要になるみたいです。
この辺はどういう作業が必要になるか、もうちょっと勉強してみようと思います。