단일 이벤트가 종단 데이터에 영향을 미칠 가능성을 분석하기 위해 어떤 통계 모델을 사용해야합니까


19

특정 이벤트가 일부 세로 데이터에 영향을 줄 가능성을 분석하는 데 사용할 수식, 방법 또는 모델을 찾으려고합니다. Google에서 무엇을 검색해야하는지 파악하기가 어렵습니다.

시나리오 예는 다음과 같습니다.

매일 평균 100 명의 고객을 보유한 업체를 소유하고 있습니다. 하루는 매일 매장에 도착하는 대형 고객 수를 늘리기로 결정하여 매장 밖에서 미친 스턴트를 끌어 당겨 주목을받습니다. 다음 주에 하루 평균 125 명의 고객이 방문합니다.

앞으로 몇 개월 동안 비즈니스를 더 많이하고 싶다고 결정하고 조금 더 오래 유지할 수 있으므로 다른 임의의 일을 시도하여 상점에서 더 많은 고객을 확보하십시오. 불행히도, 당신은 최고의 마케팅 담당자가 아니며, 일부 전략은 거의 또는 전혀 영향을 미치지 않으며, 다른 전략은 부정적인 영향을 미칩니다.

하나의 개별 이벤트가 워크 인 고객 수에 긍정적 또는 부정적인 영향을 줄 확률을 결정하기 위해 어떤 방법을 사용할 수 있습니까? 상관 관계가 반드시 인과 관계에 해당되는 것은 아니라는 것을 잘 알고 있지만 고객이 특정 이벤트를 수행하는 동안 일상적인 업무 수행 률의 증가 또는 감소를 결정하기 위해 어떤 방법을 사용할 수 있습니까?

워크 인 고객 수를 늘리려는 시도 사이에 상관 관계가 있는지 분석하는 데 관심이 없지만, 하나의 이벤트가 다른 이벤트와 상관없이 영향을 주는지 여부는 분석에 관심이 없습니다.

이 예제는 다소 복잡하고 단순하다는 것을 알고 있으므로 사용중인 실제 데이터에 대한 간단한 설명도 제공합니다.

특정 마케팅 대행사가 새 콘텐츠를 게시하거나 소셜 미디어 캠페인을 수행 할 때 고객의 웹 사이트에 미치는 영향을 확인하려고합니다. 특정 대행사 중 한 곳에서 1 ~ 500 명의 고객이있을 수 있습니다. 각 고객은 5 페이지에서 1 백만 이상의 웹 사이트를 보유하고 있습니다. 지난 5 년 동안 각 기관은 수행 한 작업 유형, 영향을받은 웹 사이트의 웹 페이지 수, 소요 시간 등을 포함하여 각 클라이언트에 대한 모든 작업에 주석을 달았습니다.

데이터웨어 하우스 (여러 스타 / 스노 플레이크 스키마에 배치)에 조립 한 위의 데이터를 사용하여 한 번의 작업 (한 번에 한 번의 이벤트)이 어느 정도 영향을 미쳤는지 확인해야합니다. 특정 작업에 의해 영향을받는 모든 페이지를 때리는 트래픽 웹 사이트에서 40 가지 유형의 콘텐츠에 대한 모델을 만들었습니다.이 콘텐츠 유형의 페이지는 출시일부터 현재까지 발생할 수있는 일반적인 트래픽 패턴을 설명합니다. 적절한 모델을 기준으로 정규화되어 특정 작업의 결과로 특정 페이지가 수신되는 최대 또는 최소 방문자 수를 결정해야합니다.

기본 데이터 분석 (선형 및 다중 회귀, 상관 관계 등)에 대한 경험이 있지만이 문제를 해결하는 방법에 대한 손실이 있습니다. 과거에는 일반적으로 주어진 축 (예 : 온도 대 갈증 대 동물에 대한 여러 측정으로 데이터를 분석하고 온대에 걸쳐 온대가 증가하는 갈증에 미치는 영향을 결정)과 비교했지만 위의 느낌을 분석하려고합니다. 비선형이지만 예측 가능하거나 (또는 ​​최소한 모델 가능) 종 방향 데이터 집합에 대한 특정 시점의 단일 이벤트 나는 뒤죽박죽이다 :(

도움, 팁, 조언, 권장 사항 또는 지시 사항은 매우 도움이 될 것이며 영원히 감사하겠습니다!


종단 데이터 모델링에 전념하는 전체 통계 분석이 있습니다. 같은 주제에 대해 반복적 인 조치를 취했다면 혼합 된 모델이 종종 사회 과학 분야의 최첨단으로 사용되어 개입의 영향이 있는지 판단합니다. 시계열이있는 경우 Arima와 같은 것만 사용할 수 있습니다.
B_Miner 2016 년

RDD 접근 방식도 유용 할 수 있습니다. austinclemens.com/blog/2014/06/08/436
B_Miner

답변:


11

레코드의 경우, 이것이 데이터 과학 스택 교환에 완벽한 질문 유형이라고 생각합니다. 데이터 문제의 실제 사례와이를 해결하는 최선의 방법에 대한 몇 가지 관점을 얻을 수 있기를 바랍니다.

p- 값이 잘못 오도 될 수 있으므로 p- 값을 사용 하지 않는 것이 좋습니다 ( 1 , 2 ). 내 접근 방식은 일부 개입 전후에 특정 페이지의 트래픽을 요약 할 수 있다는 데 달려 있습니다. 당신이 걱정하는 것은 개입 전후 의 비율 의 차이입니다 . 즉, 일일 조회수는 어떻게 변경됩니까? 아래에서는 시뮬레이션 된 예제 데이터를 사용한 첫 번째 찌르기 접근 방식에 대해 설명합니다. 그런 다음 한 가지 잠재적 함정과 그에 대한 조치를 설명하겠습니다.

먼저 개입 전후의 한 페이지에 대해 생각해 봅시다. 개입이 하루에 약 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()

개입 전후의 일일 히트 분포

우리는 평균적으로 개입이 하루 평균 조회수를 증가 시켰음을 분명히 알 수 있습니다. 그러나 요율 차이를 수량화하려면 한 회사의 개입을 여러 페이지에 사용해야합니다. 기본 요율은 페이지마다 다르기 때문에 요율의 변화율을 계산해야합니다.

이제 n = 100페이지에 대한 데이터가 있다고 가정 해 봅시다 . 각 페이지는 동일한 회사의 개입을 받았습니다. 우리가 취하는 백분율 차이를 얻으려면 (평균 (하루 전 히트)-평균 (하루 후 히트)) / 평균 (하루 전 히트) :

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이므로이 회사가 효과적 일 가능성이 매우 높습니다.

마지막으로, 잠재적 인 함정 : 각 페이지에는 아마도 고려해야 할 몇 가지 기본 경향이있을 것입니다. 즉, 개입이 없어도 일일 조회수가 증가 할 수 있습니다. 이를 설명하기 위해 결과 변수가 매일 적중하고 독립 변수가 일인 간단한 선형 회귀를 추정합니다 (day = 0에서 시작하여 샘플의 모든 요일에 대해 단순히 증가시킵니다). 그런 다음 매일 각 조회수에서 추정값 y_hat을 빼서 데이터 추세를 줄입니다. 그런 다음 위의 절차를 수행하고 양의 백분율 차이가 기본 추세로 인한 것이 아니라고 확신 할 수 있습니다. 물론 추세는 선형이 아닐 수 있으므로 신중하게 사용하십시오! 행운을 빕니다!


그러한 철저한 설명에 대단히 감사합니다! 정말 감사. 너와 neone4373 사이에서 나는 문제를 해결할 수 있었다! 이 공동체는 흔들린다! 감사!
피터 커비

10

제 데이터 분석가 시대에이 유형의 문제는 꽤 일반적이었습니다. 기본적으로 마케팅의 모든 사람들은 KPI를 2000 % 증가시키는 단일 이벤트로 더 많이 팔렸다는 미친 아이디어를 떠 올릴 것입니다. 더 높은 업은 그들을 승인하고 "테스트"를 시작합니다. 결과는 다시 나타 났으며, 경영진은 데이터 분석가에게 데이터를 덤프하여 효과가있는 작업과 수행 한 작업을 결정했습니다.

짧은 대답은 같은 기간에 무작위 A / B 스타일 테스트로 실행되지 않았는지 실제로 알 수 없다는 것입니다. 그러나 나는 순수한 답변이 존재하지 않는다는 사실이 미래의 비즈니스 의사 결정의 시급성과 관련이 없다면 그 답변이 얼마나 부족한지 잘 알고 있습니다. 이 상황에서 분석을 구제하는 데 사용할 기술 중 일부는 과학보다 예술이라는 것을 명심하십시오.

핸들

핸들은 보유 할 수있는 데이터에 존재하는 것입니다. 당신이 당신의 상황에서 나에게 말한 것에서 당신은 마케팅 에이전시가 누구인지, 그들이 전략을 시도했을 때, 그리고 그것을 적용한 사이트에 대해 많은 정보를 가지고 있습니다. 이것들은 시작점이며 이와 같은 정보는 분석의 초석이 될 것입니다.

방법론

이 방법론은 대행사에게 모든 이익에 대한 신용을 부여하는 데 가장 큰 영향을 미치므로 명확하게 설명하고 모든 이해 관계자가 합리적으로 동의하는지 확인해야합니다. 그렇게 할 수 없다면 사람들이 분석을 신뢰하기가 어려울 것입니다.

이에 대한 예는 전환입니다. 마케팅 부서에서 리드를 구매하고 방문 페이지에 도착한다고 가정하면 3 일 동안 구매 한 경우 해당 기간 내에 구매 한 경우 전환 된 것으로 간주합니다. 왜 3 일, 5 나 1이 아닌가? 모두가 동의하는 한 중요하지 않습니다. 이제 정의 할 수 있습니다.

비교

이상적인 관계에서 결정적인 관계를 입증하기 위해 멋진 A / B 테스트를 받으시겠습니까, 나는 당신이 그에 대해 부족하다고 가정 할 것입니다. 여전히 데이터와 같은 간단한 비교에서 무언가를 배울 수 있습니다. 기업이 라디오 광고의 효과를 판단하려고 할 때 종종 같은 시장에서 오프셋 개월에 광고를 실행하거나 한 시장에서 몇 개월 동안 광고를 실행하여 별도의 그러나 유사한 시장에있는 결과와 비교합니다. 과학에는 통하지 않지만 모든 소음이 있어도 강력한 결과는 거의 항상 눈에.니다.

효과를 등록하기 위해 이벤트가 얼마나 오래 제공되는지 결정하기 위해 귀하의 경우에 이들을 결합합니다. 해당 기간의 데이터를 수집 한 후에는 모델링 된 트래픽 예측, 주별 성장, 월별 등을 기준으로 데이터를 실행하면 대행사 간 및 기간별로 의미있는 비교가 가능합니다.

프래그머티즘

열망은 원인과 결과에 대한 깊은 이해를 제공 할 수 있지만 현실적이지 않을 수 있습니다. 복잡한 외부 요인으로 인해 분석이 이루어 지므로이 질문에 대해 계속해서 계속해서 질문을하게 될 것입니다. 내가 이것을 줄 수있는 최선의 조언은 당신이 측정하고자하는 것에 대한 매우 현실적인 목표를 설정하는 것입니다. 좋은 시작점은 방법론 내에서 어떤 이벤트가 가장 큰 영향을 미쳤는지입니다. 일단 당신이 그 곳에서 조리개를 열면.

개요

이러한 모든 측면을 추론 한 후에는 자동화 할 수있는 일반적인 솔루션을 구축 할 수 있습니다. 이러한 방식으로 솔루션을 설계하면 비즈니스 로직이 이미 내장되어 있다는 장점이 있습니다. 이렇게하면 비 기술적 인 비즈니스 리더에게 결과를 훨씬 더 접근 가능하고 직관적으로 만들 수 있습니다.


미친 마케팅 담당자를위한 @ 1. 시장 조사에서 일하고 열악한 통계로 인한 왜곡은 나를 슬프게합니다.
Christian Sauer

2

편집 : 경고, 메시지를 남겼지 만 대답이 잘못 된 것 같습니다. 아래 의견을 확인하십시오!

나는 전문가가 아니지만 주요 문제는이 질문에 대답하는 것입니다.

특정 날짜의 조회수에 영향을 미치는 이벤트가 있습니까?

그러나 여러 이벤트를 처리하는 방법을 모르므 로이 질문에 대답하려고합니다.

  • 이벤트 X가 특정 날짜의 조회수에 영향을 줍니까?

p- 값에 대한 가설 테스트를 사용하여 대답 할 수 있습니다 (예 : 약이 질병에 영향을 미치는지 여부를 과학자가 평가하기 위해 수행하는 작업).

p- 값을 사용하면 특정 날짜의 적중 횟수가 정상적인 상황에서 무작위로 허용 가능한지 또는 모델의 변경 사항에 해당해야 하는지를 결정할 수 있습니다.

p- 값에 대한 자세한 내용은 Open Intro to Statistics Book 에서 실제로 읽을 수 있습니다 .

그런 다음 문제의 다른 부분은 이벤트를 식별하고 질문에 대답하는 데 필요한 매개 변수 (평균 / 중간 값, 분산 등)를 계산하는 방법과 최신 상태로 유지하는 방법입니다.


1

몇 년 전 (2015) Google은 특정 이벤트가 시계열 모델에 미치는 영향에 대한 연구 논문을 발표했습니다. 자세한 내용은 여기에서 베이지안 구조적 시계열 모델을 사용하여 인과 관계 영향 추정 하기를 참조하십시오 .

GitHub 페이지 에서 작동 방식에 대한 자세한 예와 설명을 찾을 수 있습니다. 요컨대

이 R 패키지는 시계열에 대해 설계된 개입의 인과 적 영향을 추정하기위한 접근 방식을 구현합니다. 예를 들어 광고 캠페인에서 하루에 몇 번의 추가 클릭이 발생 했습니까? 무작위 실험을 사용할 수없는 경우 이와 같은 질문에 대답하기가 어려울 수 있습니다.

이벤트 전 데이터 및 이벤트 후 데이터를 사용하여 모델을 학습하면 다음과 같은 플롯이 나타납니다.

여기에 이미지 설명을 입력하십시오

첫 번째 패널은 치료 후 기간에 대한 데이터와 반상 예측을 보여줍니다. 두 번째 패널은 관측 된 데이터와 실제 예측 간의 차이를 보여줍니다. 이것은 모형에 의해 추정되는 점별 인과 효과입니다. 세 번째 패널은 두 번째 패널의 포인트 별 기여를 합산하여 개입의 누적 효과를 플롯합니다.

다음을 실행하면 summary(impact)요약 및 이벤트가 시계열 데이터에 미치는 영향을 알 수 있습니다.

동일한 라이브러리가 Python으로 포팅되었습니다. 예를 들어 여기

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.