Tôi nên sử dụng mô hình thống kê nào để phân tích khả năng một sự kiện duy nhất ảnh hưởng đến dữ liệu theo chiều dọc


19

Tôi đang cố gắng tìm một công thức, phương pháp hoặc mô hình để sử dụng để phân tích khả năng một sự kiện cụ thể ảnh hưởng đến một số dữ liệu theo chiều dọc. Tôi đang gặp khó khăn trong việc tìm ra những gì cần tìm kiếm trên Google.

Đây là một kịch bản ví dụ:

Hình ảnh bạn sở hữu một doanh nghiệp có trung bình 100 khách hàng đi bộ mỗi ngày. Một ngày nọ, bạn quyết định bạn muốn tăng số lượng khách hàng đi bộ đến cửa hàng của bạn mỗi ngày, vì vậy bạn kéo một người đóng thế điên rồ bên ngoài cửa hàng của bạn để gây chú ý. Trong tuần tới, bạn thấy trung bình 125 khách hàng mỗi ngày.

Trong vài tháng tới, một lần nữa bạn quyết định rằng bạn muốn có thêm một số doanh nghiệp và có thể duy trì nó lâu hơn một chút, vì vậy bạn thử một số điều ngẫu nhiên khác để có thêm khách hàng trong cửa hàng của mình. Thật không may, bạn không phải là nhà tiếp thị tốt nhất và một số chiến thuật của bạn có ít hoặc không có tác dụng, và những người khác thậm chí có tác động tiêu cực.

Phương pháp nào tôi có thể sử dụng để xác định xác suất rằng bất kỳ một sự kiện riêng lẻ nào ảnh hưởng tích cực hoặc tiêu cực đến số lượng khách hàng đi bộ? Tôi hoàn toàn biết rằng mối tương quan không nhất thiết là quan hệ nhân quả như nhau, nhưng tôi có thể sử dụng phương pháp nào để xác định khả năng tăng hoặc giảm trong việc đi bộ hàng ngày của doanh nghiệp của bạn trong một sự kiện cụ thể?

Tôi không quan tâm đến việc phân tích xem liệu có sự tương quan giữa các nỗ lực của bạn để tăng số lượng khách hàng đi bộ hay không, mà là liệu có một sự kiện nào, độc lập với tất cả các sự kiện khác hay không, có ảnh hưởng hay không.

Tôi nhận ra rằng ví dụ này khá giả tạo và đơn giản, vì vậy tôi cũng sẽ cung cấp cho bạn một mô tả ngắn gọn về dữ liệu thực tế mà tôi đang sử dụng:

Tôi đang cố gắng xác định tác động của một cơ quan tiếp thị cụ thể đối với trang web của khách hàng của họ khi họ xuất bản nội dung mới, thực hiện các chiến dịch truyền thông xã hội, v.v. Đối với bất kỳ một cơ quan cụ thể nào, họ có thể có từ 1 đến 500 khách hàng. Mỗi khách hàng có các trang web có kích thước từ 5 trang đến hơn 1 triệu. Trong 5 năm qua, mỗi cơ quan đã chú thích tất cả công việc của họ cho từng khách hàng, bao gồm loại công việc đã được thực hiện, số lượng trang web trên một trang web bị ảnh hưởng, số giờ đã sử dụng, v.v.

Sử dụng dữ liệu trên mà tôi đã tập hợp vào một kho dữ liệu (được đặt trong một loạt các lược đồ sao / bông tuyết), tôi cần xác định khả năng một tác phẩm (bất kỳ một sự kiện nào trong thời gian) có ảnh hưởng đến lưu lượng truy cập vào bất kỳ / tất cả các trang bị ảnh hưởng bởi một phần công việc cụ thể. Tôi đã tạo các mô hình cho 40 loại nội dung khác nhau được tìm thấy trên một trang web mô tả mẫu lưu lượng truy cập điển hình mà một trang có loại nội dung nói trên có thể trải nghiệm từ ngày ra mắt cho đến hiện tại. Chuẩn hóa so với mô hình phù hợp, tôi cần xác định số lượng khách truy cập tăng hoặc giảm cao nhất và thấp nhất mà một trang cụ thể nhận được do kết quả của một tác phẩm cụ thể.

Mặc dù tôi có kinh nghiệm về phân tích dữ liệu cơ bản (hồi quy tuyến tính và đa biến, tương quan, v.v.), tôi không biết làm thế nào để tiếp cận giải quyết vấn đề này. Trong khi trước đây tôi thường phân tích dữ liệu bằng nhiều phép đo cho một trục nhất định (ví dụ nhiệt độ so với khát với động vật và xác định tác động đối với cơn khát tăng nhiệt độ ở động vật), tôi cảm thấy rằng ở trên, tôi đang cố gắng phân tích tác động của một sự kiện duy nhất tại một thời điểm nào đó cho một bộ dữ liệu theo chiều dọc, nhưng có thể dự đoán được (hoặc ít nhất là có thể mô hình hóa). Tôi bối rối :(

Bất kỳ trợ giúp, mẹo, gợi ý, khuyến nghị hoặc hướng dẫn sẽ vô cùng hữu ích và tôi sẽ biết ơn mãi mãi!


Có cả một lớp các phân tích thống kê dành cho việc mô hình hóa dữ liệu theo chiều dọc. Nếu bạn đã lặp đi lặp lại các biện pháp trên cùng một đối tượng thì các mô hình hỗn hợp thường được sử dụng như là công nghệ tiên tiến trong khoa học xã hội để xác định xem có tác động của can thiệp hay không. Nếu bạn có một chuỗi thời gian, chỉ có thể sử dụng thứ gì đó như Arima.
B_Miner

Cách tiếp cận RDD cũng có thể hữu ích cho bạn: austinclemens.com/blog/2014/06/08/436
B_Miner

Câu trả lời:


11

Đối với hồ sơ, tôi nghĩ rằng đây là loại câu hỏi hoàn hảo cho khoa học dữ liệu Stack Exchange. Tôi hy vọng chúng ta có được một loạt các ví dụ thực tế về các vấn đề dữ liệu và một số quan điểm về cách tốt nhất để giải quyết chúng.

Tôi khuyến khích bạn không sử dụng giá trị p vì chúng có thể gây hiểu nhầm ( 1 , 2 ). Cách tiếp cận của tôi xoay quanh việc bạn có thể tóm tắt lưu lượng truy cập trên một trang nhất định trước và sau một số can thiệp. Điều bạn quan tâm là sự khác biệt về tỷ lệ trước và sau can thiệp. Đó là, số lần truy cập mỗi ngày thay đổi như thế nào? Dưới đây, tôi giải thích một cách tiếp cận đâm đầu tiên với một số dữ liệu ví dụ mô phỏng. Sau đó tôi sẽ giải thích một cạm bẫy tiềm tàng (và tôi sẽ làm gì với nó).

Trước tiên, hãy nghĩ về một trang trước và sau khi can thiệp. Giả vờ can thiệp tăng lượt truy cập mỗi ngày khoảng 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()

Phân phối lượt truy cập mỗi ngày trước và sau khi can thiệp

Chúng ta có thể thấy rõ rằng sự can thiệp đã tăng số lần truy cập trung bình mỗi ngày. Nhưng để định lượng sự khác biệt về tỷ lệ, chúng ta nên sử dụng sự can thiệp của một công ty cho nhiều trang. Vì tỷ lệ cơ bản sẽ khác nhau cho mỗi trang, chúng tôi nên tính toán phần trăm thay đổi về tỷ lệ (một lần nữa, tỷ lệ ở đây là lượt truy cập mỗi ngày).

Bây giờ, hãy giả vờ rằng chúng tôi có dữ liệu cho n = 100các trang, mỗi trang đều nhận được sự can thiệp từ cùng một công ty. Để có được phần trăm chênh lệch, chúng tôi lấy (trung bình (lượt truy cập mỗi ngày trước) - trung bình (lượt truy cập mỗi ngày sau)) / mean (lượt truy cập mỗi ngày trước đó):

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

Phân phối phần trăm thay đổi

Bây giờ chúng tôi có phân phối các tham số quan tâm của chúng tôi! Chúng ta có thể truy vấn kết quả này theo những cách khác nhau. Ví dụ: chúng tôi có thể muốn biết chế độ hoặc (xấp xỉ) giá trị có khả năng nhất cho phần trăm thay đổi này:

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)

Khi tôi chạy cái này, tôi nhận được 0.126, không tệ, xem xét phần trăm thay đổi thực sự của chúng tôi là 15. Chúng tôi cũng có thể thấy số lượng thay đổi tích cực, gần bằng xác suất can thiệp của một công ty cụ thể cải thiện lượt truy cập mỗi ngày:

(pct_diff > 0).mean()

Ở đây, kết quả của tôi là 0,93, vì vậy chúng tôi có thể nói có một cơ hội khá tốt rằng công ty này có hiệu quả.

Cuối cùng, một cạm bẫy tiềm ẩn: Mỗi trang có thể có một số xu hướng cơ bản mà bạn có thể nên tính đến. Đó là, ngay cả khi không có sự can thiệp, lượt truy cập mỗi ngày có thể tăng lên. Để giải thích cho điều này, tôi sẽ ước tính một hồi quy tuyến tính đơn giản trong đó biến kết quả là số lần truy cập mỗi ngày và biến độc lập là ngày (bắt đầu từ ngày = 0 và chỉ đơn giản là tăng cho tất cả các ngày trong mẫu của bạn). Sau đó, trừ đi ước tính, y_hat, từ mỗi số lần truy cập mỗi ngày để giảm xu hướng dữ liệu của bạn. Sau đó, bạn có thể thực hiện quy trình trên và tự tin rằng chênh lệch phần trăm dương không phải do xu hướng cơ bản. Tất nhiên, xu hướng có thể không tuyến tính, vì vậy hãy sử dụng thận trọng! Chúc may mắn!


Cảm ơn bạn rất nhiều vì một lời giải thích kỹ lưỡng như vậy! Tôi rất trân trọng điều này. Giữa bạn và neone4373 tôi đã có thể giải quyết vấn đề! Cộng đồng này đá! Cảm ơn!
Peter Kirby

10

Quay lại những ngày phân tích dữ liệu của tôi, loại vấn đề này khá điển hình. Về cơ bản, tất cả mọi người trong ngành tiếp thị sẽ đưa ra một ý tưởng điên rồ rằng việc bán cho những người cao hơn như là một sự kiện duy nhất sẽ thúc đẩy KPI lên 2000%. Những người cao hơn sẽ chấp thuận họ và sau đó họ sẽ bắt đầu "thử nghiệm" của họ. Kết quả sẽ quay trở lại và ban quản lý sẽ đổ nó cho các nhà phân tích dữ liệu để xác định cái gì hiệu quả và ai đã làm nó.

Câu trả lời ngắn gọn là bạn không thể thực sự biết nếu nó không chạy dưới dạng thử nghiệm kiểu A / B ngẫu nhiên trong khoảng thời gian như thế. Nhưng tôi rất ý thức về câu trả lời đó thiếu sót như thế nào, đặc biệt nếu thực tế là một câu trả lời thuần túy không tồn tại là không liên quan đến sự cấp bách của các quyết định kinh doanh trong tương lai. Dưới đây là một số kỹ thuật tôi sẽ sử dụng để cứu vãn phân tích trong tình huống này, hãy nhớ rằng đây là một nghệ thuật sau đó là một khoa học.

Xử lý

Tay cầm là thứ tồn tại trong dữ liệu mà bạn có thể giữ. Từ những gì bạn đang nói với tôi trong tình huống của bạn, bạn có rất nhiều thông tin về cơ quan tiếp thị là ai, khi họ thử một chiến thuật, và họ đã áp dụng nó vào trang web nào. Đây là điểm khởi đầu của bạn và thông tin như thế này sẽ là nền tảng cho phân tích của bạn.

Phương pháp luận

Phương pháp này có thể sẽ có tác động mạnh mẽ nhất đến việc các cơ quan được cấp tín dụng cho bất kỳ và tất cả lợi nhuận, do đó bạn sẽ cần đảm bảo rằng đó là những phác thảo rõ ràng và tất cả các bên liên quan đều đồng ý rằng nó có ý nghĩa. Nếu bạn không thể làm điều đó sẽ rất khó để mọi người tin tưởng vào phân tích của bạn.

Một ví dụ về điều này là chuyển đổi. Giả sử bộ phận tiếp thị mua một số khách hàng tiềm năng và họ đến trang đích của chúng tôi, chúng tôi sẽ theo dõi họ trong 3 ngày, nếu họ mua hàng trong thời gian đó, chúng tôi sẽ tính họ là đã được chuyển đổi. Tại sao 3 ngày, tại sao không phải 5 hay 1? Điều đó không quan trọng miễn là mọi người đồng ý, bây giờ bạn có một định nghĩa bạn có thể xây dựng.

So sánh

Trong một lý tưởng bạn sẽ có một bài kiểm tra A / B tốt đẹp để chứng minh mối quan hệ dứt khoát, tôi sẽ giả định rằng bạn đang thiếu những thứ đó, tuy nhiên, bạn có thể học được điều gì đó từ một so sánh đơn giản về dữ liệu. Khi các công ty đang cố gắng xác định hiệu quả của quảng cáo radio, họ sẽ thường chạy quảng cáo vào các tháng bù trên cùng một thị trường hoặc trong vài tháng ở một thị trường và so sánh với kết quả ở một thị trường riêng biệt nhưng tương tự nhau. Nó không vượt qua được khoa học, nhưng ngay cả với tiếng ồn đó, kết quả mạnh mẽ hầu như sẽ luôn được chú ý.

Tôi sẽ kết hợp những thứ này trong trường hợp của bạn để xác định thời gian một sự kiện được đưa ra để đăng ký hiệu ứng. Khi bạn có dữ liệu từ khoảng thời gian đó, nó sẽ chạy theo dự đoán lưu lượng truy cập được mô hình hóa của bạn, tăng trưởng theo tuần, qua tháng, v.v. Điều đó, sau đó, có thể cho phép so sánh có ý nghĩa giữa các đại lý và qua các khoảng thời gian.

Chủ nghĩa thực dụng

Khát vọng là có thể cung cấp một sự hiểu biết sâu sắc về nguyên nhân và kết quả, nhưng có lẽ nó không thực tế. Bởi vì các yếu tố bên ngoài lộn xộn làm cho phân tích của bạn như thế nào, bạn sẽ liên tục phải đối mặt với câu hỏi lặp đi lặp lại: Sự kiện này có làm tăng khối lượng / doanh số / lần nhấp hay không, hoặc làm bất cứ điều gì đều có tác dụng tương tự? Lời khuyên tốt nhất tôi có thể đưa ra cho điều này là đặt ra các mục tiêu rất thực tế cho những gì bạn đang muốn đo lường. Một điểm khởi đầu tốt là, trong phương pháp bạn có, sự kiện nào có tác động lớn nhất. Một khi bạn có những khẩu độ mở của bạn từ đó.

Tóm lược

Một khi bạn đã giải thích được tất cả các khía cạnh này, bạn có thể tiến hành xây dựng một giải pháp chung mà sau đó có thể được tự động hóa. Lợi thế để thiết kế giải pháp của bạn theo cách này là logic kinh doanh đã được tích hợp sẵn. Điều này sẽ giúp kết quả của bạn dễ tiếp cận và trực quan hơn nhiều đối với các nhà lãnh đạo doanh nghiệp phi kỹ thuật.


@ 1 cho những kẻ tiếp thị điên rồ. Làm việc trong nghiên cứu thị trường và sự vặn vẹo được thực hiện với số liệu thống kê kém làm tôi buồn ...
Christian Sauer

2

Chỉnh sửa: Cảnh báo, tôi để lại tin nhắn nhưng câu trả lời của tôi có vẻ sai, vui lòng xem bình luận bên dưới!

Tôi không phải là chuyên gia nhưng tôi đoán vấn đề chính là trả lời câu hỏi này:

Có / bất kỳ sự kiện nào ảnh hưởng đến số lần truy cập vào một ngày nhất định không?

Nhưng tôi không biết làm thế nào để điều trị nhiều sự kiện, vì vậy tôi sẽ cố gắng trả lời câu hỏi này:

  • Sự kiện X có ảnh hưởng đến số lần truy cập vào một ngày nhất định không?

Điều này có thể được trả lời bằng cách sử dụng thử nghiệm giả thuyết với giá trị p (nhà khoa học làm gì để đánh giá chẳng hạn nếu một loại thuốc có ảnh hưởng đến bệnh hay không).

Bằng cách sử dụng giá trị p, bạn có thể xác định xem số lần truy cập trong một ngày nhất định chỉ là ngẫu nhiên và có thể chấp nhận được trong các trường hợp thông thường hoặc chúng phải tương ứng với thay đổi trong mô hình của bạn.

Bạn có thể đọc thêm về giá trị p trong Open Intro to Statistics Book , tôi thực sự đã tìm hiểu về chúng từ đó.

Sau đó, các phần khác của vấn đề là làm thế nào để xác định các sự kiện của bạn và tính toán các tham số cần thiết để trả lời câu hỏi của bạn (trung bình / trung bình, phương sai, v.v.) và cũng là cách giữ cho nó cập nhật và hoạt động.


1

Vài năm trước (2015), Google đã xuất bản một bài nghiên cứu về hiệu ứng của một sự kiện cụ thể trong một mô hình chuỗi thời gian. Bạn có thể đọc thêm chi tiết ở đây Suy ra tác động nhân quả bằng cách sử dụng các mô hình chuỗi thời gian cấu trúc Bayes .

Trong trang GitHub này , bạn có thể tìm thấy một ví dụ chi tiết và mô tả về cách thức hoạt động của nó. Nói ngắn gọn,

Gói R này thực hiện một cách tiếp cận để ước tính tác động nhân quả của một can thiệp được thiết kế theo chuỗi thời gian. Ví dụ: có bao nhiêu lần nhấp hàng ngày được tạo bởi một chiến dịch quảng cáo? Trả lời một câu hỏi như thế này có thể khó khăn khi một thí nghiệm ngẫu nhiên không có sẵn.

Bạn huấn luyện mô hình của mình với dữ liệu trước sự kiện và dữ liệu sau sự kiện và bạn có được một cốt truyện như thế này

nhập mô tả hình ảnh ở đây

Bảng đầu tiên hiển thị dữ liệu và dự đoán chính xác cho giai đoạn hậu xử lý. Bảng thứ hai cho thấy sự khác biệt giữa dữ liệu được quan sát và dự đoán chính xác. Đây là hiệu ứng nhân quả theo điểm, theo ước tính của mô hình. Bảng thứ ba cộng các đóng góp theo chiều từ bảng thứ hai, dẫn đến một âm mưu về hiệu ứng tích lũy của can thiệp.

Chạy phần sau summary(impact), bạn sẽ có được một bản tóm tắt và tác động ước tính của sự kiện có trong dữ liệu chuỗi thời gian của bạn.

Thư viện tương tự cũng đã được chuyển sang Python. Ví dụ ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.