當(dāng)前位置:首頁 > 測試測量 > 測試測量
[導(dǎo)讀]A/B測試是大多數(shù)公司用來測試其產(chǎn)品特性的在線實(shí)驗(yàn)的黃金標(biāo)準(zhǔn)。雖然A/B測試試驗(yàn)在大多數(shù)情況下效果良好,但特別容易受到干擾,特別是在在線市場或社交網(wǎng)絡(luò)中。在本文中,我們旨在研究帶有干擾偏差的情況,以及一些減輕其對(duì)評(píng)價(jià)影響的潛在方法。

A/B測試是大多數(shù)公司用來測試其產(chǎn)品特性的在線實(shí)驗(yàn)的黃金標(biāo)準(zhǔn)。雖然A/B測試試驗(yàn)在大多數(shù)情況下效果良好,但特別容易受到干擾,特別是在在線市場或社交網(wǎng)絡(luò)中。在本文中,我們旨在研究帶有干擾偏差的情況,以及一些減輕其對(duì)評(píng)價(jià)影響的潛在方法。

A/B測試的基本假設(shè)及其違反情況

A/B測試的基本假設(shè)之一是Sutva--穩(wěn)定的單位處理值假設(shè)。隨機(jī)化單元治療的潛在結(jié)果只取決于他們所接受的治療,而不是分配給其他受試者的治療。

在市場和社會(huì)網(wǎng)絡(luò)上的實(shí)驗(yàn)中,這種情況經(jīng)常遭到侵犯。可能的侵權(quán)行為包括:

· a/b在社交網(wǎng)絡(luò)上測試實(shí)驗(yàn)。比如說,我們想了解在"信碼"上添加"故事"功能的效果。一個(gè)增加治療部門人員參與度的功能會(huì)影響到與他們有聯(lián)系的控制部門人員??刂撇块T的人回應(yīng)他們的故事,這可以增加他們的參與。這是一個(gè)實(shí)際治療效果比我們?cè)趯?shí)驗(yàn)中看到的要小的例子。

· A/B在里茲野兔市場的測試實(shí)驗(yàn):假設(shè)一個(gè)里茲野兔市場引入了對(duì)騎馬者的折扣,并希望在無折扣控制下對(duì)其進(jìn)行測試。另外,利息的度量是乘坐的次數(shù)。然而,如果治療者開始要求更多的乘坐,那么控制者可以使用的駕駛就會(huì)減少。這種情況下的治療效果被夸大了。

· 一個(gè)類似的例子是一個(gè)廣告市場,在這個(gè)市場中,多個(gè)活動(dòng)都在競爭一個(gè)廣告。然而,假設(shè)有固定的廣告商預(yù)算。該預(yù)算由治療和控制部門分?jǐn)?。想象一?我們提出的功能增加了點(diǎn)擊率。在治療中,如果預(yù)算開始花費(fèi)更多,控制組的可用預(yù)算就會(huì)減少。在這種情況下,治療效果再次膨脹。

減緩干擾效應(yīng)

通過修改實(shí)驗(yàn)設(shè)置和因果推理技術(shù),我們可以減輕A/B測試中干擾的影響。我探究了技術(shù)背后的直覺,而不是技術(shù)細(xì)節(jié)。我將分享推薦信,這樣你也可以稍后再做。

預(yù)算分割測試

這通常是在處理和控制之間共享廣告商預(yù)算等公共資源時(shí)使用的。在這方面,預(yù)算是按實(shí)驗(yàn)流量的比例來分配的,這樣處理和控制就有了自己的預(yù)算,并且沒有拆食。這種方法費(fèi)用高昂,因?yàn)榭赡軐?dǎo)致預(yù)算利用不足。有關(guān)這方面的更多細(xì)節(jié),可在民劉等人的論文中找到。,2021年。我給出了一個(gè)基本代碼來創(chuàng)建一個(gè)預(yù)算劃分實(shí)驗(yàn)系統(tǒng)。

import random

class BudgetSplitTest:

def __init__(self, total_budget, control_traffic_ratio):

self.total_budget = total_budget

self.control_traffic_ratio = control_traffic_ratio

self.treatment_traffic_ratio = 1 - control_traffic_ratio

# Split budget based on traffic ratio

self.control_budget = total_budget * control_traffic_ratio

self.treatment_budget = total_budget * self.treatment_traffic_ratio

# Track spent budget and conversions

self.control_spent = 0

self.treatment_spent = 0

self.control_conversions = 0

self.treatment_conversions = 0

def run_experiment(self, total_impressions):

for _ in range(total_impressions):

if random.random() < self.control_traffic_ratio:

self._serve_control_ad()

else:

self._serve_treatment_ad()

def _serve_control_ad(self):

if self.control_spent < self.control_budget:

spend = min(random.uniform(0.1, 1.0), self.control_budget - self.control_spent)

self.control_spent += spend

if random.random() < 0.1: # 10% conversion rate for control

self.control_conversions += 1

def _serve_treatment_ad(self):

if self.treatment_spent < self.treatment_budget:

spend = min(random.uniform(0.1, 1.0), self.treatment_budget - self.treatment_spent)

self.treatment_spent += spend

if random.random() < 0.15: # 15% conversion rate for treatment

self.treatment_conversions += 1

def get_results(self):

return {

"Control": {

"Budget": round(self.control_budget, 2),

"Spent": round(self.control_spent, 2),

"Conversions": self.control_conversions,

"CPA": round(self.control_spent / self.control_conversions, 2) if self.control_conversions else 0

},

"Treatment": {

"Budget": round(self.treatment_budget, 2),

"Spent": round(self.treatment_spent, 2),

"Conversions": self.treatment_conversions,

"CPA": round(self.treatment_spent / self.treatment_conversions, 2) if self.treatment_conversions else 0

}

}

# Run the experiment

total_budget = 10000

control_traffic_ratio = 0.5 # 50% traffic to control, 50% to treatment

total_impressions = 100000

experiment = BudgetSplitTest(total_budget, control_traffic_ratio)

experiment.run_experiment(total_impressions)

results = experiment.get_results()

轉(zhuǎn)換實(shí)驗(yàn)

開關(guān)回用在兩面市場更常見,比如來夫特,Uber,多達(dá)什,所有的用戶都在處理和控制之間切換。這里的隨機(jī)化單元不是用戶而是時(shí)間單位。如果時(shí)間間隔短,這種方法可以從處理到控制產(chǎn)生溢出效應(yīng),否則會(huì)導(dǎo)致實(shí)驗(yàn)?zāi)芰Σ蛔恪N覀兛梢允褂没貧w分析等方法來增加功率。

import random

from datetime import datetime, timedelta

class SwitchbackExperiment:

def __init__(self, experiment_name, start_time, end_time, interval_hours=1):

self.name = experiment_name

self.start_time = start_time

self.end_time = end_time

self.interval_hours = interval_hours

self.schedule = self._create_schedule()

self.data = []

def _create_schedule(self):

schedule = []

current_time = self.start_time

while current_time < self.end_time:

schedule.append({

'start': current_time,

'end': current_time + timedelta(hours=self.interval_hours),

'variant': random.choice(['control', 'treatment'])

})

current_time += timedelta(hours=self.interval_hours)

return schedule

def get_active_variant(self, timestamp):

for interval in self.schedule:

if interval['start'] <= timestamp < interval['end']:

return interval['variant']

return None # Outside experiment time range

def record_event(self, timestamp, metric_value):

variant = self.get_active_variant(timestamp)

if variant:

self.data.append({

'timestamp': timestamp,

'variant': variant,

'metric_value': metric_value

})

def get_results(self):

control_data = [event['metric_value'] for event in self.data if event['variant'] == 'control']

treatment_data = [event['metric_value'] for event in self.data if event['variant'] == 'treatment']

return {

'control': {

'count': len(control_data),

'total': sum(control_data),

'average': sum(control_data) / len(control_data) if control_data else 0

},

'treatment': {

'count': len(treatment_data),

'total': sum(treatment_data),

'average': sum(treatment_data) / len(treatment_data) if treatment_data else 0

}

}

# Example usage

if __name__ == "__main__":

# Set up the experiment

start = datetime(2023, 5, 1, 0, 0)

end = datetime(2023, 5, 8, 0, 0) # One week experiment

exp = SwitchbackExperiment("New Pricing Algorithm", start, end, interval_hours=4)

# Simulate events (e.g., rides in a rideshare app)

current_time = start

while current_time < end:

# Simulate more rides during peak hours

num_rides = random.randint(5, 20)

if 7 <= current_time.hour <= 9 or 16 <= current_time.hour <= 18:

num_rides *= 2

for _ in range(num_rides):

# Simulate a ride

ride_time = current_time + timedelta(minutes=random.randint(0, 59))

ride_value = random.uniform(10, 50) # Ride value between $10 and $50

exp.record_event(ride_time, ride_value)

current_time += timedelta(hours=1)

# Analyze results

results = exp.get_results()

圖組隨機(jī)化(GCR)

在社會(huì)網(wǎng)絡(luò)實(shí)驗(yàn)中,圖形集群隨機(jī)化是一種進(jìn)一步減少干擾偏差的技術(shù)。 . 該方法在形成集群時(shí)考慮到網(wǎng)絡(luò)結(jié)構(gòu),有助于在網(wǎng)絡(luò)社區(qū)中隔離處理效果。然后將集群隨機(jī)分配給處理和控制。由于集群的孤立,干擾會(huì)自動(dòng)減小.

資源調(diào)整指標(biāo)

我們可以使用解釋資源分配的衡量標(biāo)準(zhǔn),而不僅僅側(cè)重于絕對(duì)結(jié)果。例如,在廣告活動(dòng)中,我們可能不僅僅是衡量點(diǎn)擊率,而是跟蹤每次點(diǎn)擊的成本或廣告支出的返回,這使不同預(yù)算水平的結(jié)果正?;?。

合成控制

在出現(xiàn)干擾的情況下,可以構(gòu)建綜合控制組,根據(jù)其他單位的指標(biāo)來模擬處理對(duì)某一單位的指標(biāo)的影響。例如,假設(shè)我們把這個(gè)國家作為一個(gè)整體,在一個(gè)預(yù)先測試的時(shí)期,一個(gè)國家的度量標(biāo)準(zhǔn)是根據(jù)其他國家的度量標(biāo)準(zhǔn)建模的。當(dāng)我們?cè)谝粋€(gè)國家推廣這一特征后,我們可以通過比較這一模型所預(yù)測的指標(biāo)來模擬推廣干預(yù)的效果。結(jié)果的差異可能很大,足以衡量小影響。

信息技術(shù)服務(wù)

中斷時(shí)間序列模型。定義干預(yù)點(diǎn),如特征推廣,然后使用干預(yù)前時(shí)間序列預(yù)測觀測結(jié)果。將其與實(shí)際觀察結(jié)果進(jìn)行比較,以確定干預(yù)是否對(duì)時(shí)間序列產(chǎn)生影響。

亂滾

逐步引入對(duì)一小部分用戶的更改,并在擴(kuò)展展開之前監(jiān)控結(jié)果。這使您能夠及早發(fā)現(xiàn)潛在的問題并減輕干擾的影響。

實(shí)際上,所有這些方法都應(yīng)該與AB測試方法結(jié)合使用。例如,可以定義一些指標(biāo),以查看是否檢測到廣告市場的干擾。如果沒有問題,AB測試結(jié)果是可以信任的,否則,我們可以進(jìn)行預(yù)算分割測試。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉