Jakiego modelu statystycznego powinienem użyć do analizy prawdopodobieństwa, że ​​pojedyncze zdarzenie wpłynęło na dane podłużne


19

Próbuję znaleźć formułę, metodę lub model do zastosowania w celu analizy prawdopodobieństwa, że ​​określone zdarzenie wpłynęło na niektóre dane podłużne. Z trudem zastanawiam się, czego szukać w Google.

Oto przykładowy scenariusz:

Wyobraź sobie, że jesteś właścicielem firmy, która codziennie odwiedza średnio 100 klientów. Pewnego dnia decydujesz, że chcesz zwiększyć liczbę klientów przychodzących do twojego sklepu każdego dnia, więc robisz szalony wyczyn poza sklepem, aby zwrócić na siebie uwagę. W ciągu następnego tygodnia dziennie widzisz średnio 125 klientów.

W ciągu następnych kilku miesięcy ponownie zdecydujesz, że chcesz uzyskać więcej działalności, a być może utrzymasz ją trochę dłużej, więc wypróbuj inne losowe rzeczy, aby zdobyć więcej klientów w sklepie. Niestety nie jesteś najlepszym marketerem, a niektóre z twoich taktyk mają niewielki lub żaden efekt, a inne nawet negatywne.

Jakiej metodyki mógłbym użyć do określenia prawdopodobieństwa, że ​​jakieś pojedyncze wydarzenie pozytywnie lub negatywnie wpłynie na liczbę klientów? W pełni zdaję sobie sprawę, że korelacja niekoniecznie oznacza związek przyczynowy, ale jakich metod mogę użyć, aby określić prawdopodobny wzrost lub spadek codziennego spaceru Twojej firmy po konkretnym wydarzeniu?

Nie jestem zainteresowany analizą, czy istnieje korelacja między twoimi próbami zwiększenia liczby wchodzących klientów, ale raczej, czy jedno zdarzenie, niezależnie od wszystkich innych, miało wpływ.

Zdaję sobie sprawę, że ten przykład jest raczej przemyślany i uproszczony, dlatego dam ci również krótki opis rzeczywistych danych, których używam:

Próbuję określić wpływ, jaki dana agencja marketingowa ma na witrynę swojego klienta, gdy publikują nowe treści, przeprowadzają kampanie w mediach społecznościowych itp. Dla każdej konkretnej agencji może mieć od 1 do 500 klientów. Każdy klient ma witryny o wielkości od 5 stron do ponad 1 miliona. W ciągu ostatnich 5 lat każda agencja odnotowała całą swoją pracę dla każdego klienta, w tym rodzaj wykonanej pracy, liczbę stron internetowych, na które wywierał wpływ, liczbę spędzonych godzin itp.

Korzystając z powyższych danych, które zgromadziłem w hurtowni danych (umieszczonej w wiązce schematów gwiazda / płatek śniegu), muszę ustalić, jak prawdopodobne jest to, że jakakolwiek część pracy (dowolne zdarzenie w czasie) miała wpływ na ruch uderzający w dowolne / wszystkie strony, na który wpływ ma określony utwór. Stworzyłem modele dla 40 różnych rodzajów treści, które można znaleźć na stronie internetowej, które opisują typowy wzorzec ruchu na stronie o tym typie treści, który może występować od daty uruchomienia do chwili obecnej. Znormalizowany w stosunku do odpowiedniego modelu, muszę określić najwyższą i najniższą liczbę zwiększonych lub zmniejszonych odwiedzających określoną stronę otrzymaną w wyniku określonego dzieła.

Chociaż mam doświadczenie w podstawowej analizie danych (regresja liniowa i wielokrotna, korelacja itp.), Brakuje mi podejścia do rozwiązania tego problemu. Podczas gdy w przeszłości zazwyczaj analizowałem dane z wieloma pomiarami dla danej osi (na przykład temperatura vs pragnienie vs zwierzę i określałem wpływ na pragnienie, jaki wzrost temperatury ma na zwierzęta), czuję, że powyżej próbuję przeanalizować wpływ pojedynczego zdarzenia w pewnym momencie dla nieliniowego, ale przewidywalnego (lub przynajmniej modelowego), podłużnego zestawu danych. Jestem zakłopotany :(

Każda pomoc, wskazówki, wskazówki, rekomendacje lub wskazówki byłyby niezwykle pomocne i byłbym wiecznie wdzięczny!


Istnieje cała klasa analiz statystycznych poświęconych modelowaniu danych podłużnych. Jeśli powtórzyłeś pomiary na te same tematy, wówczas mieszane modele są często stosowane jako najnowocześniejsze w naukach społecznych w celu ustalenia, czy wpływ ma interwencja. Jeśli masz szereg czasowy, możesz użyć tylko czegoś takiego jak Arima.
B_Miner

Przydatne może być również podejście RDD: austinclemens.com/blog/2014/06/08/436
B_Miner

Odpowiedzi:


11

Dla przypomnienia, myślę, że jest to pytanie, które idealnie nadaje się do analizy danych Stack Exchange. Mam nadzieję, że otrzymamy kilka rzeczywistych przykładów problemów z danymi i kilka perspektyw, w jaki sposób najlepiej je rozwiązać.

Chciałbym zachęcić Cię nie używać wartości p, ponieważ mogą one być dość mylące ( 1 , 2 ). Moje podejście polega na tym, że możesz podsumować ruch na danej stronie przed i po jakiejś interwencji. Zależy Ci na różnicy w stawce przed i po interwencji. To znaczy, jak zmienia się liczba trafień dziennie? Poniżej wyjaśniam pierwsze podejście dźgnięciem za pomocą symulowanych danych przykładowych. Wyjaśnię następnie jedną potencjalną pułapkę (i co bym z tym zrobił).

Najpierw zastanówmy się nad jedną stroną przed i po interwencji. Udawaj, że interwencja zwiększa liczbę trafień dziennie o około 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()

Dystrybucja trafień dziennie przed i po interwencji

Widzimy wyraźnie, że interwencja zwiększyła średnio liczbę trafień dziennie. Aby jednak oszacować różnicę w stawkach, powinniśmy zastosować interwencję jednej firmy na wielu stronach. Ponieważ podstawowa stawka będzie różna dla każdej strony, powinniśmy obliczyć procentową zmianę stawki (ponownie, stawką tutaj jest liczba wyświetleń dziennie).

Teraz udawajmy, że mamy dane dla n = 100stron, z których każda otrzymała interwencję od tej samej firmy. Aby uzyskać procentową różnicę, którą bierzemy (średnia (liczba trafień dziennie wcześniej) - średnia (liczba trafień dziennie później)) / średnia (liczba trafień dziennie wcześniej):

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()

Rozkład zmiany procentowej

Teraz mamy rozkład naszego parametru zainteresowania! Możemy zapytać o ten wynik na różne sposoby. Na przykład możemy chcieć poznać tryb lub (przybliżenie) najbardziej prawdopodobną wartość tej zmiany procentowej:

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)

Kiedy to uruchomiłem, otrzymałem 0,126, co nie jest złe, biorąc pod uwagę naszą prawdziwą zmianę procentową wynoszącą 15. Możemy również zobaczyć liczbę pozytywnych zmian, które przybliżają prawdopodobieństwo, że interwencja danej firmy poprawi liczbę trafień dziennie:

(pct_diff > 0).mean()

Tutaj mój wynik to 0,93, więc możemy powiedzieć, że jest całkiem spora szansa, że ​​ta firma jest skuteczna.

Wreszcie, potencjalna pułapka: każda strona prawdopodobnie ma pewien podstawowy trend, który prawdopodobnie należy uwzględnić. Oznacza to, że nawet bez interwencji liczba trafień dziennie może wzrosnąć. Aby to wyjaśnić, oszacowałbym prostą regresję liniową, w której zmienną wynikową jest liczba trafień na dzień, a zmienną niezależną jest dzień (początek od dnia = 0 i po prostu przyrost dla wszystkich dni w próbie). Następnie odejmij szacunkową wartość y od liczby odwiedzin dziennie, aby usunąć trend z danych. Następnie możesz wykonać powyższą procedurę i mieć pewność, że dodatnia różnica procentowa nie wynika z trendu bazowego. Oczywiście trend może nie być liniowy, więc używaj dyskrecji! Powodzenia!


Dziękuję bardzo za tak dokładne wyjaśnienie! Bardzo to doceniam. Między tobą a neone4373 udało mi się rozwiązać problem! Ta społeczność się kołysze! Dzięki!
Peter Kirby

10

W czasach moich analityków danych ten typ problemu był dość typowy. Zasadniczo każdy w marketingu wpadłby na szalony pomysł, że sprzedawany wyższym awansom jako pojedyncze wydarzenie, które zwiększy KPI o 2000%. Wyższe osoby zatwierdzą je, a następnie rozpoczną „test”. Wyniki wrócą, a kierownictwo rzuci to na analityków danych, aby ustalić, co zadziałało i kto to zrobił.

Krótka odpowiedź brzmi: nie możesz naprawdę wiedzieć, czy nie był przeprowadzany jako przypadkowy test stylu A / B w podobnych okresach. Ale jestem bardzo świadomy tego, jak słaba jest ta odpowiedź, szczególnie jeśli fakt, że nie ma czystej odpowiedzi, nie ma znaczenia dla pilności przyszłych decyzji biznesowych. Oto niektóre techniki, których użyłbym do ocalenia analizy w tej sytuacji. Pamiętaj, że jest to raczej sztuka niż nauka.

Uchwyty

Uchwyt to coś, co istnieje w danych, które możesz zatrzymać. Z tego, co mi mówisz w swojej sytuacji, masz wiele informacji na temat tego, kim jest agencja marketingowa, kiedy wypróbowali taktykę i do której strony zastosowali ją. To jest twój punkt wyjścia i takie informacje będą kamieniem węgielnym twojej analizy.

Metodologia

Metodologia najprawdopodobniej będzie miała największy wpływ na to, które agencje są uznawane za wszelkie zyski, więc będziesz musiał upewnić się, że jest wyraźnie zarysowany, a wszyscy interesariusze zgadzają się, że ma to sens. Jeśli tego nie zrobisz, ludziom będzie trudno zaufać Twojej analizie.

Przykładem tego są konwersje. Powiedzmy, że dział marketingu kupuje potencjalnych klientów i docierają do naszej strony docelowej. Śledzilibyśmy je przez 3 dni, jeśli dokonaliby zakupu w tym czasie, uznalibyśmy je za przekonwertowane. Dlaczego 3 dni, dlaczego nie 5 lub 1? To nie jest ważne, dopóki wszyscy się z tym zgadzają, masz teraz definicję, z której możesz zbudować.

Porównania

W idealnym przypadku miałbyś miły test A / B, aby udowodnić ostateczny związek, zakładam, że brakuje Ci tych danych, ale możesz nauczyć się czegoś z prostego porównania podobnych danych. Kiedy firmy próbują określić skuteczność reklamy radiowej, często wyświetlają reklamy w przesuniętych miesiącach na tym samym rynku lub przez kilka miesięcy na jednym rynku i porównują to z wynikami na osobnym, ale podobnym rynku. Nauka nie zalicza się do nauki, ale nawet przy tym całym hałasie dobre wyniki prawie zawsze będą zauważalne.

Połączyłbym je w twoim przypadku, aby ustalić, jak długo trwa wydarzenie, aby zarejestrować efekt. Gdy uzyskasz dane z tego okresu, uruchom je w oparciu o modelowane prognozy ruchu, wzrost z tygodnia na tydzień, z miesiąca na miesiąc itp. Które mogą następnie umożliwić sensowne porównanie między agencjami i dla różnych okresów.

Pragmatyzm

Dążeniem jest dogłębne zrozumienie przyczyny i skutku, ale prawdopodobnie nie jest to realistyczne. Z uwagi na to, jak niechlujne czynniki zewnętrzne powodują, że Twoja analiza jest ciągle powtarzana: czy to wydarzenie spowodowało zwiększenie wolumenu / sprzedaży / kliknięć, czy też robienie czegokolwiek miałoby taki sam efekt? Najlepszą radą, jaką mogę udzielić, jest ustalenie bardzo realistycznych celów w zakresie tego, co chcesz zmierzyć. Dobrym punktem wyjścia jest, według posiadanej metodologii, które wydarzenie miało największy wpływ. Kiedy już je otworzysz, stamtąd otwórz aperturę.

streszczenie

Po wyjaśnieniu wszystkich tych aspektów możesz przystąpić do budowy ogólnego rozwiązania, które następnie można zautomatyzować. Zaletą zaprojektowania takiego rozwiązania jest to, że logika biznesowa jest już wbudowana. Dzięki temu Twoje wyniki będą znacznie bardziej przystępne i intuicyjne dla nietechnicznych liderów biznesu.


@ 1 dla szalonych marketingowców. Smutno mi jest pracować w badaniach rynku i przekręcać kiepskie statystyki ...
Christian Sauer

2

Edycja: Ostrzeżenie, zostawiam wiadomość, ale moja odpowiedź wydaje się błędna, sprawdź komentarz poniżej!

Nie jestem ekspertem, ale myślę, że głównym problemem jest odpowiedź na to pytanie:

Czy jakieś zdarzenie wpłynęło na liczbę trafień w danym dniu?

Ale nie wiem, jak traktować wiele zdarzeń, więc spróbuję odpowiedzieć na to pytanie:

  • Czy zdarzenie X wpłynęło na liczbę trafień w danym dniu?

Na co można odpowiedzieć za pomocą testowania hipotez z wartościami p (co naukowcy robią, aby ocenić na przykład, czy lek wpływa na chorobę, czy nie).

Używając wartości p, możesz określić, czy liczba trafień w danym dniu była po prostu losowa i akceptowalna w normalnych okolicznościach, czy też muszą odpowiadać zmianie w twoim modelu.

Możesz przeczytać więcej o wartościach p w Open Intro to Statistics Book , faktycznie się o nich dowiedziałem.

Następnie pozostałe części problemu to sposób identyfikacji zdarzeń i obliczenia niezbędnych parametrów, aby odpowiedzieć na pytanie (średnia / mediana, wariancja itp.), A także sposób aktualizacji i działania.


1

Kilka lat temu (2015) Google opublikował artykuł badawczy o wpływie określonego zdarzenia na model szeregów czasowych. Możesz przeczytać więcej szczegółów tutaj. Wnioskowanie wpływu przyczynowego za pomocą Bayesowskich strukturalnych modeli szeregów czasowych .

Na tej stronie GitHub można znaleźć szczegółowy przykład i opis jego działania. W skrócie,

Ten pakiet R implementuje podejście do szacowania wpływu przyczynowego zaprojektowanej interwencji na szeregi czasowe. Na przykład, ile dodatkowych dziennych kliknięć wygenerowała kampania reklamowa? Odpowiedź na takie pytanie może być trudna, gdy randomizowany eksperyment nie jest dostępny.

Trenujesz swój model z danymi przed zdarzeniem i danymi po zdarzeniu i otrzymujesz taki wykres

wprowadź opis zdjęcia tutaj

Pierwszy panel pokazuje dane i prognozę alternatywną dla okresu po leczeniu. Drugi panel pokazuje różnicę między zaobserwowanymi danymi a prognozami alternatywnymi. Jest to punktowy efekt przyczynowy, oszacowany przez model. Trzeci panel sumuje punktowe wkłady z drugiego panelu, w wyniku czego powstaje wykres łącznego efektu interwencji.

Wykonując następujące czynności summary(impact), otrzymasz podsumowanie i szacunkowy wpływ zdarzenia na dane w szeregach czasowych.

Ta sama biblioteka została również przeniesiona do Pythona. Na przykład tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.