LLM پلیٹ فارمز کے لیے پروڈکٹ کے تجربات: سوئچ بیک ڈیزائن جب صارف کی رینڈمائزیشن Python میں مارکیٹ کے توازن کو توڑ دیتی ہے۔

آپ کی ٹیم LLM SaaS پلیٹ فارم کے لیے ذہین استفسار روٹنگ کی صلاحیتیں فراہم کرے گی۔ یہ فیچر ہر آنے والی درخواست کو حقیقی وقت میں پڑھتا ہے اور فیصلہ کرتا ہے کہ آیا اسے تیز رفتار معیاری ماڈل یا زیادہ پرفارمنس پریمیم ماڈل پر بھیجنا ہے۔ آف لائن تشخیص میں، کام کی تکمیل کی شرح میں 6 فیصد پوائنٹس کا اضافہ کیا جاتا ہے۔

آپ پیداواری ماحول میں جانچ کے لیے تیار ہیں۔ پلیٹ فارم انجینئر پھر ساختی مسائل اٹھاتے ہیں۔ اس کا مطلب یہ ہے کہ صارف کی سطح پر رینڈمائزیشن نہیں کی جا سکتی۔

اس مسئلے کی جڑیں causal inference میں ہے اور اس کے تکنیکی رکاوٹوں سے زیادہ گہرے اثرات ہیں۔ تمام صارفین سنٹرلائزڈ پریمیم ماڈل کی صلاحیت کے پول کا استعمال کرتے ہیں۔ معیاری A/B ٹیسٹنگ اس ماحول میں کھیل کا ایک ناہموار میدان بناتی ہے۔ جب کسی پروسیسنگ گروپ کے لیے روٹنگ AI کو فعال کیا جاتا ہے، تو اس کے صارفین پہلے پریمیم وسائل استعمال کریں گے اور کنٹرول گروپ کی دستیابی کم ہو جائے گی۔

روٹنگ AI علاج کے گروپ کے تجربے کو تبدیل کرنے سے زیادہ کرتا ہے۔ یہ بنیادی طور پر ہر کسی کے لیے وسائل کے منظر نامے کو بدل دیتا ہے۔ یہ AI کے اثرات کو الگ کرنے کے بارے میں نہیں ہے۔ ہم AI روٹنگ کے مشترکہ اثرات اور ایک تجرباتی ڈیزائن کے ذریعے کنٹرول گروپ پر عائد مصنوعی کمی کی پیمائش کر رہے ہیں۔ یہ کوئی صاف تجربہ نہیں ہے، یہ ایک مبہم پیمائش ہے۔

سوئچ بیک تجربات LLM پر مبنی پلیٹ فارمز اور مشترکہ وسائل کی مصنوعات کے لیے ایک معیاری ترمیم ہیں جہاں صارف کی سطح کی بے ترتیبی موازنہ کو توڑ سکتی ہے۔ صارفین کو بے ترتیب بنانا بند کریں اور اس کے بجائے ٹائم سلاٹس کو بے ترتیب بنائیں۔

پورا پلیٹ فارم 30 منٹ کے لیے AI روٹنگ کے ساتھ چلتا ہے اور پھر اگلے 30 منٹ کے لیے بند کر دیا جاتا ہے۔ سائیکل کو دہرانے اور کافی سلاٹس جمع کرنے کے بعد، ہم سلاٹس پر AI کے برعکس اور AI آف سلاٹس کے ذریعے علاج کے اوسط اثر کا اندازہ لگاتے ہیں۔

یہ ٹیوٹوریل آپ کو Python میں پوری سوئچ بیک پائپ لائن کے ذریعے لے جاتا ہے، بشمول سیشن لاگز سے ٹائم سیریز بنانا، کیری اوور آلودگی کی تشخیص، کیری اوور ایڈجسٹمنٹ کے ساتھ اور بغیر براہ راست اثرات کا تخمینہ لگانا، ٹائم سیریز کے ڈیٹا پر HAC معیاری غلطیوں کا اطلاق کرنا، بوٹسٹریپ اعتماد کے وقفوں کا حساب لگانا، اور تمام زمینی سچائیوں کی تصدیق کرنا۔

آخر تک، آپ جان لیں گے کہ اس تجزیہ کو اپنے LLM پلیٹ فارم ڈیٹا پر کیسے چلایا جائے اور ان چار شرائط کو تلاش کیا جائے جو اس کی خلاف ورزی کرتی ہیں۔

انڈیکس

مشترکہ LLM انفراسٹرکچر پر صارف کی سطح کی A/B جانچ کیوں ناکام ہوتی ہے۔

معیاری A/B ٹیسٹنگ بے ترتیب ہونے کے ذریعے وجہ کے نتائج خریدتی ہے۔ اگر ہم ایک سکے کو پلٹتے ہیں اور ہر صارف کو علاج یا کنٹرول تفویض کرتے ہیں، تو دونوں گروپس، اوسطاً، تمام الجھنے والے عوامل کی یکساں تقسیم کا اشتراک کریں گے۔ علاج کے لحاظ سے نتائج میں فرق مختلف ہو سکتا ہے۔ منطق کو برقرار رکھا جاتا ہے جب صارف ایک دوسرے سے آزادانہ طور پر کام کرتے ہیں۔

مشترکہ LLM انفراسٹرکچر اس آزادی کو توڑتا ہے۔ استفسار روٹنگ کے منظر نامے پر غور کریں۔ ایک بار جب آپ کے 50% صارفین کو AI روٹنگ کے لیے تفویض کیا جاتا ہے، تو انہیں کاموں کو تیزی سے اور زیادہ شرحوں پر مکمل کرنے کے لیے پریمیم ماڈلز تک ترجیحی رسائی دی جاتی ہے۔ بقیہ 50% انحطاط پذیر ماحول میں کام کرتی ہے جہاں پریمیم ماڈل کی قطاریں لمبی ہوتی ہیں کیونکہ تھراپی گروپ سیشنز کی گنجائش ہوتی ہے۔ کنٹرول گروپ کے صارفین کو بدتر دستیابی کا سامنا کرنا پڑا، اس لیے نہیں کہ AI روٹنگ فیچر ناکام ہو گیا، بلکہ اس لیے کہ تجرباتی ڈیزائن نے مصنوعی قلت پیدا کی۔

مداخلت یہاں ایک ساختی مسئلہ ہے۔ مستحکم یونٹ ٹریٹمنٹ ویلیو مفروضہ، جسے SUTVA کہا جاتا ہے، اس بات پر زور دیتا ہے کہ یونٹ کا نتیجہ صرف اس یونٹ کے علاج کی مختص پر منحصر ہے۔

SUTVA مشترکہ LLM انفراسٹرکچر پر ناکام ہو جاتا ہے۔ پروسیس شدہ صارف کے سیشن کے لیے اس صلاحیت کی ضرورت ہوتی ہے جو اس بات کا تعین کرتی ہے کہ کنٹرول کرنے والے صارف کو پریمیم ماڈل کی طرف لے جایا گیا ہے یا انحطاط شدہ معیاری ماڈل کی طرف۔ کنٹرول گروپ اب مکمل طور پر متضاد نہیں ہے۔

صارف کی سطح کے بے ترتیب ہونے کے بعد متوقع علاج کے اثرات یہ ہیں:

Naive ATE = E[outcome | AI-on user] - E[outcome | AI-off user, degraded capacity]

عملی طور پر، ضروری متضاد وہی ہوگا جو صارفین کو AI روٹنگ کے بغیر، AI روٹنگ کے بغیر، اور صلاحیت میں کمی کے بغیر ہوا ہوگا۔ 50/50 صارف کی سطح کی تقسیم کے ساتھ، اس متضاد کو کبھی نہیں دیکھا جا سکتا۔ آپ کا تخمینہ AI روٹنگ کے براہ راست اثرات کو صلاحیت میں کمی کے جرمانے کے ساتھ جوڑتا ہے، اور انہیں الگ کرنے کے لیے مجموعی صلاحیت کے استعمال کے فنکشن کو جاننے کی ضرورت ہوتی ہے، جو بہت کم لوگوں کے پاس ہے۔

دوسرے مشترکہ وسائل LLM پلیٹ فارم پیٹرن بھی اسی خرابی کا سبب بنتے ہیں۔ یعنی، ایک کیشنگ پرت جو پروسیس شدہ صارفین کی تلاش کو تیز کرتی ہے لیکن کنٹرول صارف کی مشترکہ کیش اسپیس کو استعمال کرتی ہے، ایک عمدہ ماڈل ورژن جو GPU میموری استعمال کرتا ہے اور کنٹرول گروپ میں معیاری اندازہ کو کم کرتا ہے، یا ایک بیچ شیڈیولر جو AI روٹنگ کی درخواستوں کو ترجیح دیتا ہے اور ہر چیز کے لیے قطار میں تاخیر پیدا کرتا ہے۔ مشترکہ وسائل کے تالاب کو چھونے والی کوئی بھی چیز کنٹرول گروپ کو آلودہ کرتی ہے۔

سوئچ بیک ڈیزائن صاف موازنہ کو کیسے بحال کرتا ہے۔

چونکہ معیاری رینڈمائزیشن مشترکہ وسائل کے ذریعے کنٹرول گروپ کو نقصان پہنچا سکتی ہے، ایک سوئچ بیک ڈیزائن بے ترتیب ہونے والی چیزوں کو تبدیل کرتا ہے۔ صارفین کو بے ترتیب بنانا بند کریں۔ ٹائم سلاٹس کو بے ترتیب بنائیں۔

پورا پلیٹ فارم کسی بھی وقت ایک ہی پروسیسنگ حالت میں کام کرتا ہے۔ AI روٹنگ تمام صارفین کے لیے آن یا آف ہے۔

علاج کا اشارے پہلے سے طے شدہ شیڈول کے مطابق سلاٹس کے درمیان بدلتا ہے، پورے تجربے کے دوران متبادل بلاکس کے ذریعے سائیکل چلاتا ہے۔ رن کے اختتام پر، ہر سلاٹ میں سلاٹس کی ایک ٹائم سیریز ہوتی ہے جس میں علاج کے میٹرکس اور مجموعی نتائج ہوتے ہیں، جیسے کام کی تکمیل کی اوسط شرح یا فی سیشن اوسط لاگت۔ ہم علاج کے اشاریہ پر نتائج کو پیچھے چھوڑتے ہیں اور گتانک اوسط علاج کے اثر کا تخمینہ ہیں۔

شکل 1: تین سلاٹ سوئچ بیک ڈیزائن کا تصوراتی منصوبہ۔ بلیو ایریا بلاک پر AI روٹنگ ہے، جبکہ نارنجی ہر سائیکل میں پہلے AI آف سلاٹ کو نشان زد کرتا ہے، جہاں بلاکس پر پچھلے سے کیری اوور مصنوعی طور پر نتائج کو بڑھاتا ہے۔
گرین بینڈ حقیقی 6pp براہ راست اثر کی نمائندگی کرتا ہے۔ آل آن اور آل آف سلاٹس کا سادہ موازنہ اندازے کے اثر کو بڑھاتا ہے کیونکہ انٹرا بلاک کیری اوور کی براہ راست شراکت کو الگ نہیں کیا جا سکتا۔

واضح موازنے بحال کیے گئے ہیں کیونکہ پلیٹ فارم مخصوص سلاٹس کے لیے واحد حالات میں کام کرتا ہے۔ ایک سلاٹ کے اندر تمام صارفین کو ایک جیسا سلوک ملتا ہے۔ AI-آف سلاٹس AI-on سلاٹس کے لیے قابل اعتماد جوابی حقائق کے طور پر کام کرتے ہیں اگر تمام سلاٹوں میں طلب کی شرائط کا موازنہ رہتا ہے۔

اہم پیچیدگی کیری اوور ہے۔ اگر AI روٹنگ کے اثرات بعد کے AI آف سلاٹس میں برقرار رہتے ہیں جیسے کہ گرم روٹنگ کیشز، جاری سیشن جو AI روٹنگ میں شروع ہوتے ہیں اور سوئچ کے بعد مکمل ہوتے ہیں، یا صارف کے بدلے ہوئے رویے جو سلاٹ باؤنڈری کے پار برقرار رہتے ہیں، تو AI آف سلاٹ کے نتائج کو مصنوعی طور پر بقایا AI اثرات سے بڑھایا جائے گا۔

سادہ موازنہ اس جینیاتی بلندی کو براہ راست علاج کے اثرات کے ساتھ الجھاتے ہیں، تخمینے کو اوپر کی طرف متوجہ کرتے ہیں۔ کیری اوور کا تخمینہ لگانا اور اسے ختم کرنا سوئچ بیک تجربات میں ایک اہم تجزیاتی چیلنج ہے۔ یہ وہ جگہ ہے جہاں زیادہ تر اصل کام مضمر ہے اور زیادہ تر اس ٹیوٹوریل میں کیا شامل ہے۔

شناخت کے مفروضے

سوئچ بیک انفرنس صرف اس صورت میں وجہ کی تشریح کی اجازت دیتا ہے جب چار شرائط موجود ہوں۔

1. سلاٹ کے درمیان صفر یا محدود کیری اوور۔

ایک سلاٹ میں AI روٹنگ کے اثرات متعصب موازنہ کے بعد کے سلاٹ میں برقرار نہیں رہتے ہیں۔ اس ٹیوٹوریل میں کیری اوور ماڈل فرسٹ آرڈر پرسٹینس (پہلے آرڈر میں تاخیر) کو پکڑتا ہے۔ اگر اثر متعدد ادوار تک رہتا ہے، تو رجعت میں مزید وقفے کی شرائط کی ضرورت ہوتی ہے۔

2. علاج کے پورے شیڈول میں مستقل مزاجی کی ضرورت ہے۔

AI-on اور AI-off سلاٹس کو اسی طرح کی بنیادی طلب کی شرائط کا سامنا ہے۔ اگر پیر کی صبح کی سلاٹ میں ہمیشہ AI آن ہوتا ہے اور اتوار کی دوپہر کے سلاٹ میں ہمیشہ AI بند ہوتا ہے، تو مانگ میں فرق پروسیسنگ موازنہ کو اس طرح آلودہ کر دے گا کہ تاخیر کی اصلاح کو درست نہیں کیا جا سکتا۔

3. بلاک کی حدود پر کوئی ریمپ اپ اثر نہیں ہے۔

سسٹم ہر سلاٹ کے اندر مستحکم حالت تک پہنچتا ہے۔ اگر روٹنگ ماڈل کا کیش ٹھنڈا ہے، تاکہ ہر AI-on بلاک میں پہلا سلاٹ بعد کے سلاٹس سے بدتر کارکردگی کا مظاہرہ کرے، وہ ریمپ اپ پیریڈ مستحکم ریاست کے براہ راست اثر کا نیچے کی طرف متعصب تخمینہ پیدا کرے گا۔

4. بقایا خود کار تعلق کو حل کر دیا گیا ہے۔

سلاٹ کی باقیات وقت کے ساتھ ساتھ ڈیمانڈ سائیکل، صلاحیت کے واقعات، اور پلیٹ فارم کی سطح کے جھٹکے کی وجہ سے ایک سے زیادہ وقت کے وقفوں سے منسلک ہو سکتے ہیں۔ HAC معیاری خرابیاں یا بوٹسٹریپ CI اسے ٹھیک کر دے گا (عام OLS معیاری غلطیاں کافی نہیں ہوں گی)۔

"جب منتقلی ناکام ہو جاتی ہے” سیکشن ہر ناکامی کے موڈ کو ایک مخصوص مفروضے سے نقشہ بناتا ہے جس کی خلاف ورزی ہوتی ہے۔

اس ٹیوٹوریل میں تمام کوڈ درج ذیل ساتھی نوٹ بک میں آخر سے آخر تک چلتا ہے: 06_switchback/switchback_demo.ipynb.

شرطیں

  • Python 3.11+

  • پانڈاس 2.x (pip install pandas)

  • NumPy 1.26+ (pip install numpy)

  • ریاستی ماڈل 0.14+ (pip install statsmodels)

  • matplotlib 3.8+ (pip install matplotlib)

مصنوعی ڈیٹاسیٹ حاصل کرنے کے لیے، ساتھی ریپوزٹری کو کلون کریں۔

git clone https://github.com/RudrenduPaul/product-experimentation-causal-inference-genai-llm
cd product-experimentation-causal-inference-genai-llm
python data/generate_data.py

تخلیق اسکرپٹ لکھتا ہے: data/synthetic_llm_logs.csvمصنوعی SaaS LLM پروڈکٹ ٹیلی میٹری کی 50,000 لائن فائل۔ اہم کالم ہیں۔ user_id، task_completed (بائنری نتیجہ) cost_usdاور session_minutes.

مرحلہ 1 میں سلاٹ مختص کرنے کے بعد، 48 ٹائم سلاٹس میں سے ہر ایک میں تقریباً 1,042 سیشن ہوتے ہیں۔ ڈیٹاسیٹ حقیقت پسندانہ LLM پلیٹ فارم ٹریفک کی نمائندگی کرتا ہے۔ استفسار کی آمد کی شرح، ماڈل لاگت کی تقسیم، اور سیشن کی لمبائی پیداوار کے نمونوں کے لیے کیلیبریٹ کردہ تقسیم سے اخذ کی جاتی ہے۔

مرحلہ 1: سوئچ بیک ٹائم سیریز بنانا

سوئچ بیک تجربہ ریئل ٹائم پروسیسنگ ایلوکیشن کنٹرولر کا استعمال کرتے ہوئے چلایا جاتا ہے جو پروڈکشن میں سلاٹ باؤنڈری پر روٹنگ AI کو آن اور آف کرتا ہے۔

اس ٹیوٹوریل میں، آپ سیشن لاگ سے ہر قطار کو مصنوعی ٹائم سلاٹ پر نقشہ بنا کر اور پھر سلاٹ کی سطح پر جمع کرکے ٹائم سیریز بناتے ہیں۔

import pandas as pd
import numpy as np

df = pd.read_csv("data/synthetic_llm_logs.csv")
print(f"Dataset shape: {df.shape}")
print(df[["user_id", "task_completed", "cost_usd", "session_minutes"]].head(3).round(3))

# Shuffle to eliminate row-ordering bias before slot assignment
df = df.sample(frac=1, random_state=42).reset_index(drop=True)

# Assign hour slots: 48 slots, each containing ~1,042 sessions
df['hour_slot'] = df.index % 48

# Treatment schedule: 3-slot blocks (on, on, on, off, off, off, ...)
# 3-slot blocks give the platform time to settle into each state and break
# the perfect collinearity between ai_on and its one-period lag.
ai_on_schedule = np.tile([1, 1, 1, 0, 0, 0], 8)   # 48 slots, 8 full cycles
df['ai_on'] = ai_on_schedule[df['hour_slot']]

# Aggregate to slot level: mean outcome, mean cost, treatment indicator, session count
slots = df.groupby('hour_slot').agg(
    mean_task_completed = ('task_completed', 'mean'),
    mean_cost           = ('cost_usd',       'mean'),
    ai_on               = ('ai_on',          'first'),
    n_obs               = ('user_id',         'count')
).reset_index()

print(f"nSlot-level data: {len(slots)} slots")
print(slots[['hour_slot', 'ai_on', 'mean_task_completed', 'mean_cost', 'n_obs']].head(8).round(4))
print(f"nAI-on slots: {slots['ai_on'].sum()},  AI-off slots: {(1 - slots['ai_on']).sum()}")

متوقع پیداوار:

Dataset shape: (50000, 16)
   user_id  task_completed  cost_usd  session_minutes
0        0               0     0.022             7.03
1        1               1     0.008             4.07
2        2               1     0.040             8.34

Slot-level data: 48 slots
   hour_slot  ai_on  mean_task_completed  mean_cost  n_obs
0          0      1               0.5950     0.0222   1042
1          1      1               0.5806     0.0223   1042
2          2      1               0.5950     0.0224   1042
3          3      0               0.6353     0.0218   1042
4          4      0               0.6017     0.0222   1042
5          5      0               0.6094     0.0218   1042
6          6      1               0.5912     0.0218   1042
7          7      1               0.5931     0.0219   1042

AI-on slots: 24,  AI-off slots: 24

یہ عمل ڈیٹا کی تیاری سے قطار ترتیب کے نمونے کو ہٹانے کے لیے سلاٹ مختص کرنے سے پہلے ڈیٹا سیٹ کو شفل کرکے شروع ہوتا ہے۔ 50,000 قطاروں میں سے ہر ایک کو ماڈیولو ریاضی کا استعمال کرتے ہوئے 48 جامع ٹائم سلاٹس میں سے ایک کو تفویض کیا جاتا ہے، اور پروسیسنگ کا شیڈول تین سلاٹ بلاکس میں تبدیل ہوتا ہے تاکہ آٹھ مکمل چکر مکمل ہوں۔

تین سلاٹ بلاک ڈھانچہ دو مقاصد کو پورا کرتا ہے۔ یعنی، یہ پلیٹ فارم کو علاج کی ہر حالت میں بسنے کا وقت دیتا ہے اور موجودہ علاج کے اشارے اور ایک مدت کے وقفے کے درمیان کامل ہم آہنگی کو توڑ دیتا ہے۔ بصورت دیگر، کیری اوور کے تخمینے خالصتاً شفٹ کے نظام الاوقات کی بنیاد پر ناممکن ہو جاتے ہیں۔ گنتی کے بعد، ہر سلاٹ میں تقریباً 1,042 سیشن ہوتے ہیں۔

انجیکشن سے پہلے، سلاٹ لیول کی اوسط ابھی تک علاج کے ذریعے واضح طور پر الگ نہیں کی گئی تھی۔ سلاٹس 3، 4، اور 5 (AI-off) خام ڈیٹا میں سلاٹس 0، 1، اور 2 (AI-on) سے قدرے زیادہ تکمیل کی شرح دکھاتے ہیں۔ اس کی توقع ہے۔ انجیکشن سے پہلے، علاج کی تفویض بے ترتیب ہے اور نتائج حقیقی سگنل نہیں دیتے ہیں۔ نیچے دیے گئے انجیکشن کے مراحل اصل معلومات میں بیک کرتے ہیں۔

# Known ground truth baked into the simulation
TRUE_EFFECT = 0.060   # AI routing raises task completion by 6 percentage points
CARRYOVER   = 0.030   # Residual routing effect persists into the following slot

# Replace slot means with synthetic balanced base rates.
# Slot noise std matches the CLT variance of aggregating ~1,042 Bernoulli sessions,
# simulating realistic slot-to-slot demand variation without treatment-group imbalance.
BASE_RATE = df['task_completed'].mean()
slot_noise_std = np.sqrt(BASE_RATE * (1 - BASE_RATE) / slots['n_obs'].iloc[0])
rng = np.random.default_rng(42)
slots['mean_task_completed'] = BASE_RATE + rng.normal(0, slot_noise_std, size=len(slots))

# Lag the treatment indicator: did the previous slot have AI routing on?
slots['ai_on_lag1'] = slots['ai_on'].shift(1).fillna(0).astype(int)

# Observed outcome = base outcome + treatment effect + carryover from prior slot
slots['mean_task_completed'] = (
    slots['mean_task_completed']
    + TRUE_EFFECT * slots['ai_on']
    + CARRYOVER   * slots['ai_on_lag1']
)

print("Post-injection slot data:")
print(slots[['hour_slot', 'ai_on', 'ai_on_lag1', 'mean_task_completed']].head(8).round(4))

متوقع پیداوار:

Post-injection slot data:
   hour_slot  ai_on  ai_on_lag1  mean_task_completed
0          0      1           0               0.6606
1          1      1           1               0.6701
2          2      1           1               0.6973
3          3      0           1               0.6402
4          4      0           0               0.5663
5          5      0           0               0.5761
6          6      1           0               0.6579
7          7      1           1               0.6811

انجکشن خام سلاٹ کے ذرائع کو 1,042 برنولی ٹرائلز کے تغیر کے لیے درست کیے جانے والے شور کے ساتھ بدل دیتا ہے، جس سے سلاٹ سے سلاٹ میں تغیر پیدا ہوتا ہے جو مصنوعی علاج گروپ کے عدم توازن کے بغیر پیداوار کی طلب میں تغیر کو ظاہر کرتا ہے۔

تاخیر ai_on AI آن پیریڈ کے فوراً بعد سلاٹ کی شناخت کرتا ہے۔ پھر انجیکشن فارمولہ شامل کیا جاتا ہے۔ TRUE_EFFECT (0.060) تمام AI آن سلاٹس میں CARRYOVER (0.030) ان تمام سلاٹس پر لاگو ہوتا ہے جو AI-on سلاٹ کی پیروی کرتے ہیں، قطع نظر ان کی اپنی پروسیسنگ حالت۔

سلاٹ 3 پر ایک نظر ڈالیں۔ ai_on=0 لیکن ai_on_lag1=1لہذا یہاں تک کہ اگر AI روٹنگ کو بند کر دیا گیا ہے، نتیجہ کو +0.030 کیری اوور کو فروغ ملے گا۔ یہ کیری اوور آلودگی ہے جو بولی ماڈلز میں نہیں دیکھی جاتی ہے۔

ہر سائیکل میں پہلا AI آف سلاٹ اصل آف پیریڈ کی عکاسی کرتا ہے، لیکن نتیجہ پچھلے بلاک سے بقایا روٹنگ کی حالت سے بڑھا ہوا ہے۔ سلاٹس پر تمام AI اور تمام AI آف سلاٹس کا سادہ موازنہ اعلیٰ نتائج کو AI آف کسوٹی کے حصے کے طور پر سمجھا جائے گا، حقیقی براہ راست اثر کو مسخ کرتا ہے۔

a2e1458b-751e-4e64-9e76-ea269f09de5d

شکل 2: بائیں: 6pp ​​پروسیسنگ اثرات اور 3pp کیری اوور انجیکشن لگانے کے بعد مصنوعی ڈیٹاسیٹ کی 48-سلاٹ ٹائم سیریز۔ اورنج ڈاٹ ہر سائیکل کے پہلے AI-آف سلاٹ کو نشان زد کرتا ہے (ai_on=0, ai_on_lag1=1)، جہاں نتیجہ پچھلے AI-on بلاک سے زیادہ رہتا ہے۔
دائیں: Naive OLS (سرخ) حقیقی 6pp اثر سے 0.9pp سے زیادہ ہے کیونکہ اس میں براہ راست اور وراثت میں ملنے والا کیری اوور شامل ہے۔ کیری اوور ایڈجسٹ شدہ OLS (نیلا) اصل اثر کو بحال کرتا ہے۔ دونوں 95% بوٹسٹریپ CIs میں گرین ڈیشڈ ریئل ایفیکٹ لائنیں شامل ہیں۔

مرحلہ 2: بے ہودہ تخمینہ (وقت کی ساخت کو نظر انداز کرنا)

کسی بھی وضاحت کو شامل کرنے سے پہلے واضح تخمینوں کا حساب لگائیں۔ یعنی، ہم دنیاوی ڈھانچے کو مکمل طور پر نظر انداز کرتے ہیں اور بائنری AI ایکٹیویشن اشارے پر اوسط کام کی تکمیل کو پیچھے چھوڑ دیتے ہیں۔

import statsmodels.api as sm

# Naive OLS: outcome ~ constant + ai_on
# No lag term, no time controls
X_naive = sm.add_constant(slots['ai_on'])
naive_model = sm.OLS(slots['mean_task_completed'], X_naive).fit()

naive_ate = naive_model.params['ai_on']
naive_se  = naive_model.bse['ai_on']

print("=== Naive estimate (no carryover control) ===")
print(f"  ATE estimate : {naive_ate:.4f}")
print(f"  Std error    : {naive_se:.4f}")
print(f"  95% CI       : [{naive_ate - 1.96*naive_se:.4f},  {naive_ate + 1.96*naive_se:.4f}]")
print(f"n  True effect  : {TRUE_EFFECT}")
print(f"  Bias         : {naive_ate - TRUE_EFFECT:+.4f}")

متوقع پیداوار:

=== Naive estimate (no carryover control) ===
  ATE estimate : 0.0688
  Std error    : 0.0048
  95% CI       : [0.0595,  0.0782]

  True effect  : 0.06
  Bias         : +0.0088

Naive OLS اشارے پر صرف بائنری AI پر اوسط کام کی تکمیل کو پیچھے چھوڑتا ہے، 48 سلاٹس کو 48 آزاد مشاہدات کے طور پر دیکھتا ہے جس میں کوئی وقتی ڈھانچہ نہیں ہوتا ہے۔ یہ 0.060 کے حقیقی براہ راست اثر کے لیے 0.0688 کا ATE، +0.0088 کا تعصب، یا مصنوعی لفٹ کا تقریباً پورا فیصد پوائنٹ واپس کرتا ہے۔

تعصب اس بات سے پیدا ہوتا ہے کہ کیری اوور کو دو گروپوں کے درمیان کیسے تقسیم کیا جاتا ہے۔ 3-سلاٹ آن/3-سلاٹ آف ڈیزائن میں، بلاک پر ہر AI کے سلاٹس 1 اور 2 دونوں براہ راست پروسیسنگ اثر (+0.060) اور کیری اوور اثر (+0.030) دونوں کو حاصل کرتے ہیں، جو نتیجہ کو بیس +0.090 پر دھکیلتے ہیں۔

ایک سادہ نمونہ ان دو شراکتوں کو الگ نہیں کر سکتا۔ ہم AI سے لیس سلاٹس میں اعلیٰ نتائج دیکھتے ہیں اور اس کی وجہ براہ راست علاج کو قرار دیتے ہیں۔ سلاٹس پر 24 AI میں سے، 16 کو اس کمپاؤنڈ کا انجکشن ملتا ہے، جس سے گروپ کی اوسط اصل براہ راست اثر سے کافی زیادہ ہوتی ہے۔

AI-آف سائیڈ پر، ہر بلاک میں پہلا آف سلاٹ +0.030 کیری اوور حاصل کرتا ہے، جس سے AI-آف گروپ کے لیے بیس لائن بڑھ جاتی ہے۔ یہ جزوی طور پر AI-on گروپ افراط زر کو پورا کرتا ہے، لیکن 16 جامع AI-on افراط زر کے سلاٹس 8 AI-off کیری اوور سلاٹس سے زیادہ ہیں۔ حتمی نتیجہ تقریباً +0.009 فیصد پوائنٹس کا مثبت تعصب ہے۔

ایک ٹیم جو 0.0688 پر عمل کرتی ہے جب اصل اثر 0.060 ہوتا ہے وہ موجود سے بڑے اثر کا اعلان کرے گی اور روٹنگ فنکشن کو دوسرے اقدامات پر ترجیح دے گی۔

مرحلہ 3: کیری اوور ایڈجسٹ شدہ OLS ریگریشن

اس کا حل یہ ہے کہ رجعت میں پیچھے رہ جانے والے علاج کے اشارے کو شامل کیا جائے۔ گتانک ہے۔ ai_on اس کے بعد ہم موجودہ مدت کے علاج کے براہ راست اثر کی پیمائش کرتے ہیں جبکہ پچھلے دور کے علاج کو مستقل رکھتے ہیں۔ یہ وہ مقدار ہے جو آپ چاہتے ہیں۔

# Carryover-adjusted OLS: outcome ~ constant + ai_on + ai_on_lag1
X_adj = sm.add_constant(slots[['ai_on', 'ai_on_lag1']])
adj_model = sm.OLS(slots['mean_task_completed'], X_adj).fit()

adj_ate      = adj_model.params['ai_on']
adj_carryover = adj_model.params['ai_on_lag1']
adj_se        = adj_model.bse['ai_on']

print("=== Carryover-adjusted estimate ===")
print(adj_model.summary().tables[1])

print(f"n  Direct ATE estimate  : {adj_ate:.4f}  (true: {TRUE_EFFECT})")
print(f"  Carryover estimate   : {adj_carryover:.4f}  (true: {CARRYOVER})")
print(f"  Residual bias        : {adj_ate - TRUE_EFFECT:+.4f}")

# How much did we remove?
removed = naive_ate - adj_ate
print(f"n  Bias removed vs naive: {removed:.4f}")

متوقع پیداوار:

=== Carryover-adjusted estimate ===
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          0.5996      0.003    222.975      0.000       0.594       0.605
ai_on          0.0607      0.004     16.830      0.000       0.053       0.068
ai_on_lag1     0.0244      0.004      6.754      0.000       0.017       0.032
==============================================================================

  Direct ATE estimate  : 0.0607  (true: 0.06)
  Carryover estimate   : 0.0244  (true: 0.03)
  Residual bias        : +0.0007

  Bias removed vs naive: 0.0081

ایڈجسٹ ریگریشن میں دونوں شامل ہیں۔ ai_on (موجودہ سلاٹ پروسیسنگ) اور ai_on_lag1 ہم (پچھلی سلاٹ پروسیسنگ) کو ریگریسر کے طور پر استعمال کرتے ہیں۔

ماڈل اب ہر سلاٹ میں اعلی نتائج کے ڈرائیوروں کو توڑ دیتا ہے۔ کچھ لفٹ موجودہ دور میں AI روٹنگ سے آتی ہیں اور کچھ پچھلے ادوار کے بقایا سے آتی ہیں۔ گتانک ہے۔ ai_on ہم موجودہ مدت کے صرف براہ راست اثرات کو الگ تھلگ کرتے ہیں۔

ATE کا براہ راست تخمینہ 0.0688 سے 0.0607 تک کم ہو جاتا ہے، جس سے 0.060 کی حقیقی قدر کو 0.0007 کے اندر بحال کیا جاتا ہے، بقایا تعصب معیاری غلطی سے کم ہوتا ہے۔

کیری اوور کا تخمینہ 0.0244 ہے اور اصل کیری اوور 0.030 ہے۔ کچھ کم اندازہ متوقع ہے۔ تین سلاٹ بلاک ڈھانچہ دونوں سلاٹ کے ساتھ ایک سلاٹ بناتا ہے۔ ai_on اور ai_on_lag1 یہ 1 کے برابر ہے اور ہلکی ہم آہنگی کو متعارف کراتا ہے جو کیری اوور کوفیسینٹ کو قدرے کمزور کرتا ہے۔ شامل کرنا ai_on_lag1 0.0088 سادہ تعصب میں سے 0.0081 کو ہٹا کر، ہم نے تقریباً 92% اوپر کی مسخ کو بازیافت کیا۔

مصنوعات کے تعین میں دونوں گتانکوں کی تشریح اہم ہے۔ کہ ai_on گتانک (0.0607) ہے۔ براہ راست اثر: AI روٹنگ جو موجودہ سلاٹ میں شامل کی جاتی ہے اس سے قطع نظر کہ پچھلے سلاٹ میں کیا ہوا تھا۔ کہ ai_on_lag1 گتانک (0.0244) ہے۔ لے جانے کا اثر: یہ ایک بقایا جھٹکا ہے جو روٹنگ کے بند ہونے کے بعد اگلی سلاٹ تک رہتا ہے۔ حقیقی LLM پلیٹ فارمز میں، کیری اوور سیشن لیول کی حالت میں تبدیلیوں کی عکاسی کر سکتا ہے، swarm inference caches، یا سلاٹ کی حدود میں صارف کے رویے کی عکاسی کر سکتا ہے۔

اگر ai_on_lag2 اور ai_on_lag3 اگرچہ AIC کو کم کرنا اب بھی ماپا ماڈل فٹ کو بہتر بناتا ہے، سلاٹ کی لمبائی سسٹم میموری سے کم ہے اور مزید تاخیر کی شرائط کی ضرورت ہے۔ ہم اس وقت تک تاخیر کا اضافہ کرتے ہیں جب تک کہ AIC میں بہتری نہیں آتی، اور پلیٹ فارم کے فن تعمیر کی بنیاد پر معقول استقامت پر اوپری حد قائم کرنے کے لیے ڈومین کے علم کا استعمال کرتے ہیں۔

مرحلہ 4: ٹائم سیریز ڈیٹا کے لیے HAC معیاری خرابی۔

ترمیم شدہ OLS ماڈل درست پوائنٹ تخمینہ فراہم کرتا ہے۔ تاہم، رپورٹ کردہ معیاری غلطیاں فرض کرتی ہیں کہ باقیات وقت کے ساتھ غیر مربوط ہیں۔

سلاٹ کی باقیات تمام منظم تغیرات کو وراثت میں حاصل کرتی ہیں جو پروسیسنگ میٹرکس کے ذریعے حاصل نہیں کی گئی ہیں، جیسے ڈیمانڈ سائیکل، صلاحیت کے واقعات، ماڈل ورژن کی تقسیم، اور ایک سے زیادہ وقت کے دوران صارف کے رویے کے پیٹرن۔ اس خود کار تعلق کی وجہ سے OLS معیاری غلطیاں بہت چھوٹی ہیں، جو t-statistic کو بڑھاتی ہیں اور اثر کو حقیقت سے کہیں زیادہ درست طریقے سے ماپا جاتا دکھائی دیتا ہے۔

تصحیح heteroscedasticity and autocorrelation consistency (HAC) معیاری خرابی ہے، جسے Newey-West Standard error بھی کہا جاتا ہے۔ ایک بینڈوتھ پیرامیٹر کا استعمال کرتے ہوئے بقایا میں سیریل ارتباط کے لیے درست کریں جو تاخیر کی تعداد کے مساوی ہے جس کی وجہ سے پریشانی کی توقع ہے۔

from statsmodels.stats.sandwich_covariance import cov_hac
from statsmodels.stats.stattools import durbin_watson

# First check for autocorrelation in the residuals
dw_stat = durbin_watson(adj_model.resid)
print(f"Durbin-Watson statistic: {dw_stat:.4f}")
print("  DW near 2.0 = little autocorrelation in residuals.")
print("  DW < 1.5 = positive serial correlation.")
print("  DW > 2.5 = negative serial correlation.")
print("  Apply HAC standard errors regardless -- DW only tests AR(1) structure.")

# Apply HAC correction (Newey-West), 3 lags
hac_cov = cov_hac(adj_model, nlags=3)
hac_se  = np.sqrt(np.diag(hac_cov))

print("n=== Standard error comparison ===")
print(f"  OLS SE on ai_on  : {adj_model.bse['ai_on']:.4f}")
print(f"  HAC SE on ai_on  : {hac_se[1]:.4f}")
print(f"  OLS t-stat       : {adj_model.tvalues['ai_on']:.2f}")
print(f"  HAC t-stat       : {adj_ate / hac_se[1]:.2f}")

# Construct HAC-based confidence interval manually
hac_ci_lower = adj_ate - 1.96 * hac_se[1]
hac_ci_upper = adj_ate + 1.96 * hac_se[1]
print(f"n  HAC 95% CI: [{hac_ci_lower:.4f},  {hac_ci_upper:.4f}]")
print(f"  True effect {TRUE_EFFECT} inside CI: {hac_ci_lower < TRUE_EFFECT < hac_ci_upper}")

متوقع پیداوار:

Durbin-Watson statistic: 1.9628
  DW near 2.0 = little autocorrelation in residuals.
  DW < 1.5 = positive serial correlation.
  DW > 2.5 = negative serial correlation.
  Apply HAC standard errors regardless -- DW only tests AR(1) structure.

=== Standard error comparison ===
  OLS SE on ai_on  : 0.0036
  HAC SE on ai_on  : 0.0037
  OLS t-stat       : 16.83
  HAC t-stat       : 16.41

  HAC 95% CI: [0.0535,  0.0680]
  True effect 0.06 inside CI: True

2.0 (1.9628) کے ارد گرد Durbin-Watson کے اعدادوشمار بتاتے ہیں کہ اس مصنوعی ڈیٹاسیٹ کے باقیات میں بہت کم AR(1) خود کار تعلق ہے، اس لیے HAC اور OLS معیاری غلطیاں تقریباً ایک جیسی ہیں۔ HAC 95% CI [0.0535, 0.0680] 0.060 کے حقیقی اثر کی شمولیت اس بات کی تصدیق کرتی ہے کہ ایڈجسٹ شدہ تخمینہ درست ہیں۔

پروڈکشن LLM پلیٹ فارمز میں، جہاں مانگ مسلسل گھنٹوں (صبح کی بڑھتی ہوئی، دوپہر کے کھانے کے وقت، شام کی چوٹی) میں منسلک ہوتی ہے، OLS معیاری غلطیاں مثبت سیریل ارتباط کی وجہ سے غیر یقینی صورتحال کو کم کرتی ہیں۔ میں نے ٹیموں کو اس قدم کو چھوڑتے ہوئے دیکھا ہے اور ایسے اثرات کے لیے 20+ کے t-اعداد و شمار کی اطلاع دی ہے جو نہیں رکھتے ہیں۔

ان سیٹنگز میں HAC میں ترمیم کرنا ان نمبروں کو حقیقت پسندانہ سطح تک کم کر دیتا ہے، بعض اوقات "اہم" نتائج کو غیر حتمی نتائج میں تبدیل کر دیتا ہے۔ غیر نتیجہ خیز ٹرانزیشن اسے کرنے کا صحیح طریقہ ہے۔ HAC کا اطلاق بطور ڈیفالٹ آل ٹائم سیریز ریگریشن تجزیوں پر ہوتا ہے۔ خودکار تعلق کی عدم موجودگی کی کوئی قیمت نہیں ہے اور، اگر موجود ہو تو، کافی تحفظ فراہم کرتا ہے۔

کہ nlags پیرامیٹرز کو محتاط انتخاب کی ضرورت ہے۔ ایک معقول ڈیفالٹ سلاٹ کی تعداد ہے جس کی توقع ہے کہ زیادہ سے زیادہ ڈیمانڈ سائیکل پر محیط ہے۔ اگر آپ کا پلیٹ فارم مضبوط ٹائم پیٹرن دکھاتا ہے اور 30 ​​منٹ کی سلاٹ استعمال کرتا ہے، تو درج ذیل سیٹ کریں: nlags=4 یا nlags=6 پڑوس کا احاطہ کرنے کے لئے 2-3 گھنٹے۔ اگر آپ 2 گھنٹے کی سلاٹ استعمال کرتے ہیں، nlags=2 یا nlags=3 یہ عام طور پر متعلقہ رینج کا احاطہ کرتا ہے۔

مرحلہ 5: بوٹسٹریپ اعتماد کا وقفہ

HAC کی معیاری غلطیوں کو خودکار تعلق کے لیے اس مفروضے کے تحت درست کیا جاتا ہے کہ خودکار تعلق کا ڈھانچہ ایک مخصوص پیرامیٹر فارم کی پیروی کرتا ہے۔ بوٹسٹریپ سی آئی ایسی کوئی قیاس نہیں کرتا۔ وہ سلاٹس کو تبدیل کرکے اور تخمینہ لگانے والے کا ہر بار دوبارہ حساب لگا کر تخمینہ کی غیر یقینی صورتحال کی مقدار درست کرتے ہیں۔

def bootstrap_ci(slots, B=500, seed=7):
    """Bootstrap CIs treating each slot as an independent observation.
  
    Each slot's ai_on_lag1 value is fixed from the original treatment schedule.
    Resampling slots with replacement while keeping their original lag values
    correctly quantifies estimation uncertainty without destroying the lag structure.
    """
    rng  = np.random.default_rng(seed)
    n    = len(slots)
    naive_ates, adj_ates, carryover_ests = [], [], []

    for _ in range(B):
        idx = rng.integers(0, n, size=n)
        s   = slots.iloc[idx]  # ai_on_lag1 stays as the original slot's value

        X_n = sm.add_constant(s['ai_on'])
        naive_ates.append(sm.OLS(s['mean_task_completed'], X_n).fit().params['ai_on'])

        X_a = sm.add_constant(s[['ai_on', 'ai_on_lag1']])
        m   = sm.OLS(s['mean_task_completed'], X_a).fit()
        adj_ates.append(m.params['ai_on'])
        carryover_ests.append(m.params['ai_on_lag1'])

    naive_ci     = np.percentile(naive_ates,     [2.5, 97.5])
    adj_ci       = np.percentile(adj_ates,       [2.5, 97.5])
    carryover_ci = np.percentile(carryover_ests, [2.5, 97.5])

    print(f"n=== Bootstrap 95% confidence intervals (B={B}, seed={seed}) ===")
    print(f"  Naive ATE        : [{naive_ci[0]:.4f},  {naive_ci[1]:.4f}]  "
          f"(covers {TRUE_EFFECT}: {naive_ci[0] < TRUE_EFFECT < naive_ci[1]})")
    print(f"  Adjusted ATE     : [{adj_ci[0]:.4f},  {adj_ci[1]:.4f}]  "
          f"(covers {TRUE_EFFECT}: {adj_ci[0] < TRUE_EFFECT < adj_ci[1]})")
    print(f"  Carryover effect : [{carryover_ci[0]:.4f},  {carryover_ci[1]:.4f}]  "
          f"(covers {CARRYOVER}: {carryover_ci[0] < CARRYOVER < carryover_ci[1]})")

    return naive_ci, adj_ci, carryover_ci

naive_ci, adj_ci, carryover_ci = bootstrap_ci(slots)

متوقع پیداوار:

=== Bootstrap 95% confidence intervals (B=500, seed=7) ===
  Naive ATE        : [0.0596,  0.0783]  (covers 0.06: True)
  Adjusted ATE     : [0.0541,  0.0683]  (covers 0.06: True)
  Carryover effect : [0.0175,  0.0320]  (covers 0.03: True)

ہر بوٹسٹریپ تکرار 48 سلاٹس کو متبادل کے ساتھ دوبارہ نمونہ بناتا ہے، خالص اور ایڈجسٹ OLS دونوں ماڈلز کو ریفٹ کرتا ہے، اور کلیدی تخمینوں کو ریکارڈ کرتا ہے۔ 500 نقلوں کے 2.5ویں اور 97.5ویں پرسنٹائلز بوٹسٹریپ CI فراہم کرتے ہیں۔

ہر سلاٹ کی اپنی مرضی ہوتی ہے۔ ai_on_lag1 چونکہ ہم اصل علاج کے شیڈول سے اقدار کا استعمال کرتے ہیں، تاخیر کا ڈھانچہ ہر بوٹسٹریپ ڈرا میں محفوظ ہوتا ہے۔ دوبارہ نمونے لینے سے غیر موجود وقتی تعلقات میں ہیرا پھیری کیے بغیر تخمینے کی غیر یقینی صورتحال کو پکڑتا ہے۔

تینوں 95% CIs اپنے متعلقہ زمینی سچائیوں کا احاطہ کرتے ہیں۔ بولی ATE CI [0.0596, 0.0783] یہ حقیقی اثر (0.060) کو گھیرے ہوئے ہے لیکن +0.009 مثبت تعصب کے ساتھ اوپر کی طرف بڑھتا ہے۔ ایڈجسٹ شدہ ATE CI [0.0541, 0.0683] یہ زیادہ مرکز اور تنگ ہے، اصل اثر کے قریب ہے۔ کیری اوور CI [0.0175, 0.0320] ہم 0.030 کا اصل کیری اوور شامل کرتے ہیں اور 0 کو خارج کر دیتے ہیں تاکہ یہ یقینی بنایا جا سکے کہ کیری اوور اعداد و شمار کے لحاظ سے کسی مستقل مزاجی سے ممتاز ہے۔

خارج شدہ صفر نتائج مصنوعات کے فیصلوں کے لیے اہم ہیں۔ اگر کیری اوور CI 0 پر مشتمل ہے، تو اس سے انکار نہیں کیا جا سکتا کہ کوئی بھی بلند AI-آف کے نتائج شور کا نمونہ ہیں نہ کہ حقیقی استقامت۔

زمینی سچائی کی تصدیق

معلوم حقیقی حقائق کے تین نکاتی تخمینوں کو اکٹھا کریں۔

print("=" * 52)
print(f"{'Estimator':<30} {'Estimate':>8}  {'True':>6}  {'Bias':>7}")
print("-" * 52)
print(f"{'Naive OLS (no lag)':<30} {naive_ate:>8.4f}  {TRUE_EFFECT:>6.4f}  {naive_ate - TRUE_EFFECT:>+7.4f}")
print(f"{'Carryover-adjusted OLS':<30} {adj_ate:>8.4f}  {TRUE_EFFECT:>6.4f}  {adj_ate - TRUE_EFFECT:>+7.4f}")
print(f"{'Carryover coefficient':<30} {adj_carryover:>8.4f}  {CARRYOVER:>6.4f}  {adj_carryover - CARRYOVER:>+7.4f}")
print("=" * 52)

متوقع پیداوار:

====================================================
Estimator                      Estimate    True     Bias
----------------------------------------------------
Naive OLS (no lag)               0.0688  0.0600  +0.0088
Carryover-adjusted OLS           0.0607  0.0600  +0.0007
Carryover coefficient            0.0244  0.0300  -0.0056
====================================================

موازنہ کی میز بالکل وہی ظاہر کرتی ہے جو معلوم زمینی سچائی کے لیے ہر تخمینہ لگانے والا بازیافت کرتا ہے۔

Naive OLS 0.0088 فیصد پوائنٹس سے اوور شوٹ کرتا ہے کیونکہ یہ براہ راست AI روٹنگ اثرات کو کیری اوور سے الگ نہیں کر سکتا جو AI آن اور ملحقہ AI آف سلاٹس کو بڑھاتا ہے۔ ایڈجسٹ شدہ OLS 0.0007 کے اندر حقیقی اثر کو بحال کرتا ہے، جو اعتماد کے معقول وقفے کی چوڑائی کے اندر ہے۔ کیری اوور کا گتانک 0.030 کی اصل قیمت کے مقابلے میں 0.0244 ہے۔

اسے منظم طریقے سے کم سمجھا جاتا ہے۔ ai_on اور ai_on_lag1 تین سلاٹ بلاک کی تعمیر میں، یہ کشندگی اس قسم کے تمام ڈیزائنوں میں ہوتی ہے۔

عملی مضمرات اس مصنوعی مثال سے آگے بڑھتے ہیں۔ حقیقی LLM پلیٹ فارمز میں، کیری اوور پروسیسنگ اثر سے زیادہ ہو سکتا ہے۔ اگر AI روٹنگ سسٹم بنیادی طور پر دوبارہ ترتیب دیتا ہے کہ کس طرح انفرنس کلسٹر صارفین کے لیے گرم کیش سلاٹس کو مختص کرتا ہے، تو پھر بھی AI روٹنگ کے بند ہونے کے بعد، بعد کے ادوار AI روٹنگ کی شکل میں کمپیوٹ کی تقسیم کے وارث ہوں گے۔

ان حالات کے تحت، سادہ اندازے ایک مکمل ہمیشہ آن رول آؤٹ میں مشاہدہ کیے گئے اثرات کو نمایاں طور پر بڑھا سکتے ہیں، جہاں کوئی ٹرانزیشن موجود نہیں ہے اور نہ ہی کوئی کیری اوور اسمیٹریز جمع ہوتی ہے۔

ہمیشہ لے جانے والے گتانک کا اندازہ لگائیں۔ اگر یہ اعدادوشمار کے لحاظ سے اہم ہے اور براہ راست ATE تخمینہ کے 20% سے زیادہ ہے، تو سادہ تخمینہ رول آؤٹ فیصلوں کے لیے ناقابل اعتبار ہے۔

جب سوئچ بیک ناکام ہوجاتا ہے۔

سوئچ بیک مارکیٹ کی مداخلت کو چار شرائط میں حل کرتا ہے اور دیگر چار شرائط میں وقفے دیتا ہے۔

1. لے جانے کا دورانیہ سلاٹ کی لمبائی سے زیادہ ہے۔

مفروضوں کی خلاف ورزی: ​​(1) صفر یا محدود کیری اوور۔

اگر AI روٹنگ بدل جاتی ہے کہ کس طرح انفرنس کلسٹر اپنے کیشے کو متعدد گھنٹوں تک گرم کرتا ہے، تو کیری اوور نصف زندگی 60 یا 90 منٹ سے تجاوز کر سکتی ہے۔ 30 منٹ کی سلاٹ کی لمبائی سسٹم میموری سے کم ہے، اور ایک تاخیر کی مدت کو شامل کرنے سے پوری استقامت حاصل نہیں ہو سکتی۔ کیری اوور کو کم سمجھا جائے گا اور براہ راست اثر اندازے متعصب رہیں گے۔

تشخیص: دھیرے دھیرے مزید تاخیر کریں اور مشاہدہ کریں کہ آیا AIC میں بہتری آرہی ہے۔ اگر ai_on_lag3 اور ai_on_lag4 یہ اب بھی فٹ کو بہتر بناتا ہے، لیکن سلاٹ کی لمبائی سسٹم میموری کے لیے بہت کم ہے۔ سلاٹس کو بڑھانا اور مزید وقفہ کی اصطلاحات شامل کرنا ایک ہی وسائل کی تجارت کرتا ہے۔ اس کا مطلب یہ ہے کہ مشاہدات کی موثر تعداد کم ہو جاتی ہے اور اعتماد کا وقفہ وسیع ہو جاتا ہے۔

2. غیر فکسڈ ڈیمانڈ ڈسٹربنس سلاٹس۔

مفروضوں کی خلاف ورزی: ​​(2) علاج کے پورے شیڈول میں سٹیشنریٹی کی ضرورت ہے۔

ہفتے کے دن کی صبح ٹریفک کی بڑھتی ہوئی تعداد، ہفتے کے آخر میں شام کی بڑھتی ہوئی تعداد، اور تعیناتی کے بعد اپنانے کے منحنی خطوط بنیادی طور پر مختلف پلیٹ فارم لوڈ کی صورتحال پیدا کرتے ہیں۔ اگر پروسیسنگ کا شیڈول غیر متناسب طور پر AI کو زیادہ ٹریفک والی ونڈوز میں سلاٹس پر اور AI کو کم ٹریفک والی ونڈوز میں AI آف سلاٹس پر رکھتا ہے، تو پروسیسنگ گتانک مانگ کے فرق کے ساتھ ساتھ روٹنگ AI اثرات کو جذب کرتا ہے۔

روزانہ کے شیڈول کو بے ترتیب بنانا، نیز ریگریشن میں وقت کے مقررہ اثرات کو شامل کرنا، اس مسئلے کو حل کرتا ہے۔ صبح، دوپہر، شام، اور رات بھر کے اشارے کا ایک سیٹ دن بھر کی مانگ کے اتار چڑھاؤ کو جذب کرتا ہے جو علاج کے تخمینے کو آلودہ کر سکتا ہے۔

3. ریمپ اپ اثر ہر دور کے پہلے سلاٹ میں ہوتا ہے۔

مفروضوں کی خلاف ورزی: ​​(3) بلاک باؤنڈری پر کوئی ریمپ اپ نہیں ہے۔

حقیقی دنیا کے LLM پلیٹ فارمز میں، پہلا AI-on سلاٹ اکثر بعد کے سلاٹس سے بدتر کارکردگی کا مظاہرہ کرتا ہے۔ روٹنگ ماڈل کا کیش ٹھنڈا ہے۔ مانگ کی پیشن گوئی کی پرت نے دن کے لیے سوالات کی تقسیم کا مشاہدہ نہیں کیا۔

کولڈ سٹارٹ سلاٹس کے ساتھ ساتھ سٹیڈی سٹیٹ AI-آن سلاٹس بھی کم کارکردگی کے ابتدائی ہونے والے ادوار کو اعلی کارکردگی کے توازن کے ساتھ اوسطاً نکالتے ہیں، اور ATE تخمینے پورے رول آؤٹ میں دیکھے گئے مستحکم ریاستی اثرات کو کم سمجھتے ہیں۔ معیاری مشق یہ ہے کہ ہر آن پیریڈ کے پہلے سلاٹ کو برن ان ونڈو کے طور پر ضائع کیا جائے اور ہر بلاک کے سلاٹ 2 اور 3 میں ATE کا تخمینہ لگایا جائے۔

4. دورانیہ خود کار تعلق حد سے زیادہ پراعتماد p-values ​​پیدا کرتا ہے۔

خلاف ورزی شدہ مفروضات: (4) بقایا خود کار تعلق حل ہو گیا۔

Durbin-Watson کی تشخیص پہلا ٹیسٹ ہے، لیکن یہ صرف AR(1) خودکار تعلق کا پتہ لگاتا ہے۔ حقیقی دنیا کی LLM پلیٹ فارم ٹائم سیریز میں اکثر روزانہ کی موسمی، مخصوص اوقات میں انٹرا ڈے خودکار تعلق، اور ماڈل ورژن کی تعیناتی کے بعد ساختی وقفے ہوتے ہیں۔

ماڈل کی باقیات کا مجموعی ACF پلاٹ کریں۔ تاخیر میں اضافے بامعنی طلب کے چکروں کے مساوی ہیں۔ nlags پیرامیٹر cov_hac بصورت دیگر، آپ کو بوٹسٹریپ CI پر سوئچ کرنا چاہیے، جو کسی مخصوص خودکار تعلق کا ڈھانچہ فرض نہیں کرتا ہے۔

LLM پلیٹ فارمز میں سوئچ بیک تجزیہ میں غلط مثبتات کی سب سے عام وجہ خودکار تعلق کو درست کرنے میں ناکامی ہے۔

دو اضافی ڈیزائن کی سطح کی ناکامی کے طریقوں سے باخبر رہنے کے قابل ہیں۔

15 منٹ سے کم کی سلاٹ کی لمبائی کا مطلب ہے کہ پلیٹ فارم سوئچز کے درمیان منظم نہیں ہے۔ قطار کی گہرائی، جاری سیشنز کی تعداد، اور کیش اسٹیٹس سب کچھ پچھلی مدت سے جاری رہے گا، آلودگی کو بڑھاتا ہے اور AI آف پیریڈز کو مستحکم حالت کی سرگرمی کا نمائندہ نہیں بناتا ہے۔

سلاٹ کی لمبائی 4 گھنٹے سے زیادہ علاج پر قابو پانے والے جوڑوں کی تعداد کو کم کرتی ہے، مؤثر نمونے کے سائز کو کم کرتی ہے اور اعتماد کے وقفوں کو اس مقام تک بڑھا دیتی ہے جہاں قابل قدر سائز کے اثرات کا پتہ نہیں لگایا جا سکتا۔

LLM پلیٹ فارم کے زیادہ تر تجربات کے لیے عملی میٹھی جگہ 30 منٹ سے 2 گھنٹے فی سلاٹ ہے، جس کا حتمی انشانکن ابتدائی پائلٹ ڈیٹا سے تخمینہ کیری اوور نصف زندگی سے ہوتا ہے۔

سوئچ بیک اور کلسٹر رینڈمائزیشن کب استعمال کریں۔

سوئچ بیک اور کلسٹر رینڈمائزیشن مختلف میکانزم کے ذریعے ایک ہی مداخلت کا مسئلہ حل کرتی ہے۔

کلسٹر رینڈمائزیشن صارفین کو جغرافیائی علاقے، کرایہ دار ID، یا تنظیمی اکاؤنٹ کے لحاظ سے غیر اوور لیپنگ حصوں میں تقسیم کرتی ہے اور بیک وقت پراسیس اور کنٹرول کیے جانے والے حصوں کو تفویض کرتی ہے۔ سوئچ بیک پوری آبادی کو مختلف اوقات میں علاج اور کنٹرول کے لیے تفویض کرتا ہے۔

کلسٹر رینڈمائزیشن اس وقت اچھی طرح کام کرتی ہے جب کافی الگ ہونے والے سیگمنٹ ہوں اور انٹر سیگمنٹ سپل اوور کو نظر انداز کیا جا سکے۔ LLM SaaS پلیٹ فارمز کے ساتھ انٹرپرائز کرایہ داروں کے ساتھ وقف شدہ کمپیوٹ سلائس پر، کلسٹر رینڈمائزیشن فی کرایہ دار ممکن ہے۔ اس کا مطلب ہے کہ ایک کرایہ دار کے روٹنگ کے فیصلے دوسرے کرایہ دار کی سیشن کی صلاحیت کو ختم نہیں کرتے ہیں۔

کنزیومر LLM پلیٹ فارمز کے لیے جہاں تمام صارفین ایک ہی طرح کے قیاسات کا اشتراک کرتے ہیں، صلاحیت کا رساو صارف کے حصے کی حدود کو عبور کرتا ہے اور کلسٹر رینڈمائزیشن انہیں الگ نہیں کر سکتی۔

سوئچ بیک اس وقت موزوں ہوتا ہے جب اسپل اوور سیگمنٹ کی حدود کو عبور کرتا ہے یا جب مناسب طریقے سے چلنے والے کلسٹر تجربہ کو چلانے کے لیے کافی الگ کرنے والے کلسٹرز نہ ہوں۔

زیادہ تر بڑے پلیٹ فارمز دونوں کا استعمال کرتے ہیں: پلیٹ فارم کے وسیع انفراسٹرکچر کی تبدیلیوں کے لیے سوئچ بیک جہاں کوئی واضح سیگمنٹ کی حدود موجود نہیں ہیں، اور کرایہ دار یا جغرافیائی علاقے کے لحاظ سے دائرہ کار کی اہلیت کے لیے کلسٹر رینڈمائزیشن۔

انتخاب نیچے آتا ہے جہاں مداخلت کو ممکنہ طور پر کاٹا جاسکتا ہے۔ وقت ایک قدرتی حد ہے کیونکہ نظام سلاٹ کی لمبائی سے زیادہ تیزی سے صاف ہوتا ہے، اس لیے پلیٹ فارم دوسری حالت پر جانے سے پہلے ایک حالت کے اثرات کو پوری طرح پروسیس کرتا ہے۔ سیگمنٹ ID ایک فطری حد ہوتی ہے جب وسائل کے تالاب حقیقت میں اوورلیپ نہیں ہوتے ہیں۔ اگر کوئی بھی باؤنڈری نہیں رکھتی ہے، تو ہم وجہ کے تخمینے کے دائرے میں ہیں، چاہے مصنوعی کنٹرول کے طریقے ہوں، مماثل کنٹرول سے فرق میں فرق، یا مداخلتی میکانزم کے ساختی ماڈل۔

آگے کیا کرنا ہے۔

اگر سوئچ بیک تجزیہ اچھی طرح سے شناخت شدہ کیری اوور مدت کے ساتھ ایک اہم مثبت براہ راست اثر دکھاتا ہے، تو اگلا مشکل سوال یہ ہے کہ کیا AI روٹنگ انفراسٹرکچر کی لاگت کو دیکھتے ہوئے اثر کا سائز مکمل رول آؤٹ کا جواز پیش کرتا ہے۔ پریمیم ماڈل کی قیمت معیاری ماڈل سے زیادہ فی سوال ہے۔ آیا 6pp کی تکمیل کی شرح میں اضافہ اضافی تخمینہ لاگت کا احاطہ کرتا ہے اس کا انحصار پروڈکٹ کے منیٹائزیشن کے طریقہ کار پر ہے۔

کیری اوور کے تخمینے بھی ان فیصلوں پر اثر انداز ہوتے ہیں۔

ایک بڑے کیری اوور گتانک کا مطلب یہ ہے کہ جب ہمیشہ چلنے والی روٹنگ پر سوئچ کرتے ہیں تو، پیمائش شدہ لفٹ میں سے کچھ ضائع ہو جاتی ہے اور منتقلی کی توازن ختم ہو جاتی ہے۔ کارآمد لاگت سے فائدہ کے حسابات کے لیے سادہ اندازوں کے بجائے براہ راست ATE کی ضرورت ہوتی ہے جو بغیر کسی تاخیر کے ایڈجسٹمنٹ کے حاصل کیے جا سکتے ہیں۔ اس کا مطلب ہے کہ آپ کو انفراسٹرکچر میں سرمایہ کاری شروع کرنے سے پہلے تکمیل کی شرحوں میں اضافے، تمام ٹریفک میں اضافی تخمینہ لاگت، اور ہر تخمینہ کے لیے اعتماد کے وقفوں کی آمدنی کے اثرات کی ضرورت ہے۔

اگر روٹنگ AI سوالات کی اقسام یا صارف کے حصوں میں مختلف اثرات کو ظاہر کرتا ہے، تو اگلا تجزیہ مرحلہ اپلفٹ ماڈلنگ ہے۔ اس کا مطلب ہے کہ آپ یہ اندازہ لگانے کے لیے ایک ماڈل بنا سکتے ہیں کہ پریمیم روٹنگ سے کون سے سوالات سب سے زیادہ فائدہ مند ہوں گے، جس سے آپ انہیں منتخب طریقے سے روٹ کر سکتے ہیں اور زیادہ تر کاموں کو کم قیمت پر مکمل کرنے کے فوائد حاصل کر سکتے ہیں۔

یہاں پر انجام دیا جانے والا کازل شناختی کام، بشمول سوئچ بیک ڈیزائن، کیری اوور ایڈجسٹمنٹ، اور ایچ اے سی کی اصلاح، غیرجانبدارانہ آبادی ATE فراہم کرتا ہے جو متعلقہ اضافہ ماڈل کیلیبریٹ کرنے کے لیے ایک بنیادی سچائی کے طور پر درکار ہے۔

مکمل ساتھی کوڈ یہاں موجود ہے: 06_switchback/پانچوں مراحل کے ساتھ ایک نوٹ بک، ایک فگر جنریشن اسکرپٹ، اور ڈیٹا سیٹ جنریشن کوڈ شامل ہے۔

Scroll to Top