単一のイベントが縦断データに影響を与える可能性を分析するには、どの統計モデルを使用する必要がありますか


19

特定のイベントがいくつかの縦断データに影響を与える可能性を分析するために使用する式、方法、またはモデルを見つけようとしています。Googleで何を検索すればよいかわかりません。

シナリオの例を次に示します。

毎日平均100人のウォークイン顧客がいるビジネスを所有しているイメージ。ある日、あなたは毎日あなたの店に来るウォークイン客の数を増やしたいと決めたので、あなたは店の外で狂気のスタントを引いて注意を引きます。来週には、1日平均125人の顧客がいます。

次の数か月間、あなたは再びビジネスを獲得し、おそらくそれをもう少し長く維持したいと決めたので、他のランダムなことを試して、より多くの顧客を獲得します。残念ながら、あなたは最高のマーケティング担当者ではなく、あなたの戦術のいくつかはほとんどまたはまったく効果がなく、他のものはマイナスの影響さえ持っています。

個々のイベントがウォークイン顧客の数にプラスまたはマイナスの影響を与える可能性を判断するために、どのような方法論を使用できますか?相関関係は必ずしも因果関係とは限りませんが、特定のイベント後のクライアントのビジネスにおける日々の歩行の増加または減少の可能性を判断するためにどのような方法を使用できますか?

ウォークイン顧客の数を増やしようとする試みの間に相関関係があるかどうかを分析することに興味はありませんが、他のすべてとは独立した単一のイベントが影響を与えたかどうかは分析しません。

この例はかなり不自然で単純化されているため、私が使用している実際のデータについて簡単に説明します。

特定のマーケティング代理店が新しいコンテンツを公開したり、ソーシャルメディアキャンペーンを実行したりする際に、クライアントのウェブサイトに与える影響を特定しようとしています。各クライアントには、5ページから100万をはるかに超えるサイズのWebサイトがあります。過去5年間にわたって、各代理店は、クライアントごとに、行われた作業の種類、影響を受けたWebサイト上のWebページの数、費やされた時間数など、すべての作業に注釈を付けました。

データウェアハウスにアセンブルした(スター/スノーフレークスキーマの束に配置した)上記のデータを使用して、1つの作業(時間内の1つのイベント)が影響を与えた可能性を判断する必要があります特定の作業によって影響を受ける、すべてまたはすべてのページに到達するトラフィック。Webサイトにある40種類のコンテンツのモデルを作成しました。これらのモデルは、そのコンテンツタイプのページが発売日から現在までに経験する可能性のある典型的なトラフィックパターンを説明しています。適切なモデルに関連して正規化された、特定の作業の結果として特定のページが受信した増加または減少した訪問者の最高数と最低数を判断する必要があります。

私は基本的なデータ分析(線形および重回帰、相関など)の経験がありますが、この問題を解決するためのアプローチ方法に困惑しています。過去に私は通常、特定の軸について複数の測定値を使用してデータを分析しました(たとえば、温度対渇き対動物、および動物全体で温帯の増加に伴う渇きへの影響を決定しました)、私は上記の影響を分析しようとしています非線形であるが予測可能な(または少なくともモデル化可能な)縦断的データセットのある時点での単一イベントの 私は困惑しています:(

ヘルプ、ヒント、ポインタ、推奨事項、または指示は非常に役立ち、私は永遠に感謝します!


縦断的データのモデリング専用の統計分析のクラスがあります。同じ被験者に対して繰り返し測定を行った場合、混合モデルは社会科学の最先端として頻繁に使用され、介入の影響があるかどうかを判断します。時系列がある場合は、有馬のようなものだけを使用できます。
B_Miner

RDDアプローチも役立つ場合があります:austinclemens.com/blog/2014/06/08/436
B_Miner

回答:


11

記録的には、これはデータサイエンスStack Exchangeに最適なタイプの質問だと思います。データ問題の実世界の例と、それらをどのように解決するのが最善かについてのいくつかの視点を手に入れたいと思います。

私はあなたを励ますない、彼らはかなり(誤解を招くことができるように、p値を使用する12)。私のアプローチは、特定のページのトラフィックを何らかの介入の前後に要約できるかどうかにかかっています。気にするのは、介入前後のの違いです。つまり、1日あたりのヒット数はどのように変化しますか?以下に、いくつかのシミュレートされたサンプルデータを使用した最初のスタブアプローチを説明します。次に、潜在的な落とし穴の1つを説明します(そして、それについて何をするのか)。

まず、介入の前後の1ページについて考えてみましょう。介入のふりをすると、1日あたりのヒット数が約15%増加します。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

def simulate_data(true_diff=0):
    #First choose a number of days between [1, 1000] before the intervention
    num_before = np.random.randint(1, 1001)

    #Next choose a number of days between [1, 1000] after the intervention
    num_after = np.random.randint(1, 1001)

    #Next choose a rate for before the intervention. How many views per day on average?
    rate_before = np.random.randint(50, 151)

    #The intervention causes a `true_diff` increase on average (but is also random)
    rate_after = np.random.normal(1 + true_diff, .1) * rate_before

    #Simulate viewers per day:
    vpd_before = np.random.poisson(rate_before, size=num_before)
    vpd_after = np.random.poisson(rate_after, size=num_after)

    return vpd_before, vpd_after

vpd_before, vpd_after = simulate_data(.15)

plt.hist(vpd_before, histtype="step", bins=20, normed=True, lw=2)
plt.hist(vpd_after, histtype="step", bins=20, normed=True, lw=2)
plt.legend(("before", "after"))
plt.title("Views per day before and after intervention")
plt.xlabel("Views per day")
plt.ylabel("Frequency")
plt.show()

介入前後の1日あたりのヒットの分布

介入により、平均して1日あたりのヒット数が増加したことが明確にわかります。しかし、料金の差を定量化するには、複数のページに対して1つの会社の介入を使用する必要があります。基礎となるレートはページごとに異なるため、レートの変化率を計算する必要があります(ここでもレートは1日あたりのヒット数です)。

ここでn = 100、同じ会社からの介入を受けたページのデータがあるとします。パーセントの差を取得するには、(平均(1日あたりのヒット数)-平均(1日あたりのヒット数))/平均(1日あたりのヒット数)を使用します。

n = 100

pct_diff = np.zeros(n)

for i in xrange(n):
    vpd_before, vpd_after = simulate_data(.15)
    # % difference. Note: this is the thing we want to infer
    pct_diff[i] = (vpd_after.mean() - vpd_before.mean()) / vpd_before.mean()

plt.hist(pct_diff)
plt.title("Distribution of percent change")
plt.xlabel("Percent change")
plt.ylabel("Frequency")
plt.show()

変化率の分布

これで、目的のパラメーターの分布ができました!この結果はさまざまな方法でクエリできます。たとえば、モード、またはこのパーセント変化の最も可能性の高い値(の近似値)を知りたい場合があります。

def mode_continuous(x, num_bins=None):
    if num_bins is None:
        counts, bins = np.histogram(x)
    else:
        counts, bins = np.histogram(x, bins=num_bins)

    ndx = np.argmax(counts)
    return bins[ndx:(ndx+1)].mean()

mode_continuous(pct_diff, 20)

これを実行すると、0.126になりました。これは、真の変化率が15であることを考えると、悪くありません。また、肯定的な変化の数を見ることができます。

(pct_diff > 0).mean()

ここで、私の結果は0.93であるため、この会社が有効である可能性はかなり高いと言えます。

最後に、潜在的な落とし穴:各ページには、おそらく考慮すべき基本的な傾向があります。つまり、介入なしでも、1日あたりのヒット数が増加する可能性があります。これを説明するために、結果変数が1日あたりのヒット数であり、独立変数が日である単純な線形回帰を推定します(day = 0で開始し、サンプルのすべての日について単純に増分します)。次に、1日あたりの各ヒット数から推定値y_hatを引き、データの傾向を調べます。次に、上記の手順を実行して、正のパーセントの差が根本的な傾向によるものではないことを確信できます。もちろん、トレンドは線形ではないかもしれませんので、慎重に使用してください!がんばろう!


このような徹底的な説明をありがとうございました!ほんとうにありがとう。自分とneone4373の間で問題を解決できました!このコミュニティは揺れ動きます!ありがとう!
ピーターカービー14

10

私のデータアナリストの時代に戻って、この種の問題は非常に典型的なものでした。基本的に、マーケティングの誰もが、KPIを2000%向上させる単一のイベントとして上位に売られるというおかしなアイデアを思いつきます。上層部はそれらを承認し、その後「テスト」を開始します。結果が返され、管理者はそれをデータアナリストにダンプして、何が機能し、誰がそれを行ったかを判断します。

簡単な答えは、同じような期間でランダムなA / Bスタイルのテストとして実行されなかったかどうかを本当に知ることはできないということです。しかし、特に純粋な答えが存在しないという事実が将来のビジネス上の意思決定の緊急性と無関係である場合、その答えがどれほど不十分であるかを非常に認識しています。この状況で分析を救うために使用するテクニックのいくつかを以下に示しますが、これは科学というよりも芸術であることに留意してください。

ハンドル

ハンドルは、保持できるデータに存在するものです。あなたがあなたの状況で私に言っていることから、あなたはマーケティング代理店が誰であるか、彼らが戦術を試みたとき、そしてどのサイトにそれを適用したかについて多くの情報を持っています。これらはあなたの出発点であり、このような情報は分析の基礎となります。

方法論

方法論はおそらく、どの機関がすべての利益に対してクレジットを与えられるかについて最も強い影響を保持するため、明確に概要を示し、すべての利害関係者がそれが理にかなっていることを確認する必要があります。それができないと、人々があなたの分析を信頼するのは難しくなります。

この例は、変換です。マーケティング部門がいくつかのリードを購入し、それらが私たちのランディングページに到着したとしましょう。3日追跡します。その時間内に購入した場合は、コンバージョンとしてカウントされます。なぜ3日、なぜ5または1ではないのですか?誰もが同意する限り、それは重要ではありません。これで、構築できる定義が得られます。

比較

理想的には、最終的な関係を証明するための素晴らしいA / Bテストがあると思いますが、それらが不足していると仮定しますが、同様のデータの単純な比較から何かを学ぶことができます。企業がラジオ広告の有効性を判断しようとすると、多くの場合、同じ市場でオフセット月に、または1つの市場で数か月間広告を掲載し、それを別の類似の市場での結果と比較します。科学には通用しませんが、そのようなノイズがあっても、強力な結果はほとんど常に顕著です。

これらを組み合わせて、効果を登録するためにイベントが与えられる時間を決定します。その期間のデータをモデル化されたトラフィック予測、週ごとの成長、月ごとの月などに対して実行すると、代理店間および期間全体で有意義な比較が可能になります。

プラグマティズム

願望は、原因と結果を深く理解できるようにすることですが、おそらく現実的ではありません。厄介な外的要因が分析を行うため、この質問に対して何度も何度も繰り返し実行します。このイベントはボリューム/セールス/クリックスルーを上げましたか、それとも何でも同じ効果がありましたか?これについて私ができる最善のアドバイスは、測定しようとしているものに対して非常に現実的な目標を設定することです。適切な出発点は、あなたが持っている方法論の中で、どのイベントが最も大きな影響を与えたかです。それらを開いたら、そこから開口部を開きます。

概要

これらすべての側面を推論したら、自動化できる一般的なソリューションを構築することができます。この方法でソリューションを設計することの利点は、ビジネスロジックが既に組み込まれていることです。これにより、非技術的なビジネスリーダーにとって、結果がより親しみやすく直感的になります。


クレイジーなマーケティング担当者には@ 1。...市場調査での作業と貧しい統計に行わねじれが私を悲しくなります
クリスチャン・ザウアー

2

編集:警告、メッセージを残しますが、答えが間違っているようです。以下のコメントをチェックしてください!

私は専門家ではありませんが、主な問題はこの質問に答えることです。

特定の日のヒット数に影響を与えるイベントはありますか?

しかし、複数のイベントを処理する方法がわからないので、この質問に答えようとします。

  • イベントXは特定の日のヒット数に影響しましたか?

これは、p値を使用した仮説検定を使用して答えることができます(たとえば、薬が病気に影響するかどうかを評価するために科学者が行うこと)。

p値を使用することにより、特定の日のヒット数が単なるランダムで通常の状況で許容できるかどうか、またはモデルの変更に対応する必要があるかどうかを判断できます。

p値の詳細については、Open intro to Statistics Bookを参照してください。実際にそこから学習しました。

次に、問題の他の部分は、イベントを識別し、質問に回答するために必要なパラメーター(平均/中央値、分散など)を計算する方法と、それを最新の状態に保つ方法です。


1

数年前(2015)に、Googleは特定のイベントが時系列モデルに与える影響についての研究論文を発表しました。詳細については、ベイジアン構造時系列モデルを使用した因果影響の推定をご覧ください。

このGitHubページには、詳細な例とその仕組みの説明があります。要するに、

このRパッケージは、時系列に対する設計された介入の因果効果を推定するアプローチを実装しています。たとえば、広告キャンペーンによって1日の追加クリックが何回発生しましたか?ランダム化された実験が利用できない場合、このような質問に答えることは困難です。

イベント前データとイベント後データでモデルをトレーニングすると、次のようなプロットが得られます

ここに画像の説明を入力してください

最初のパネルには、データと後処理期間の事実に反する予測が表示されます。2番目のパネルは、観測データと事実に反する予測の違いを示しています。これは、モデルによって推定される、点ごとの因果効果です。3番目のパネルは、2番目のパネルからの点ごとの寄与を加算し、介入の累積効果のプロットをもたらします。

以下を実行するsummary(impact)と、時系列データにイベントがもたらした概要と推定影響を取得できます。

同じライブラリがPythonにも移植されています。たとえば、ここに

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.