آپ کے AI پروڈکٹ نے چھ ماہ قبل ایجنٹ موڈ آپٹ ان لانچ کیا۔ ہم نے رجحان کا تجزیہ کیا، مشغولیت کے درجہ بندی اور استفسار کے اعتماد کے لیے ایڈجسٹ کیا، اور کام کی تکمیل کی شرحوں میں +8 فیصد پوائنٹ اضافے کی اطلاع دی۔ یہ اعداد و شمار سہ ماہی کاروباری جائزے میں شامل کیے گئے تھے اور ہر کوئی ان سے خوش تھا۔
لامحالہ، سخت ڈیٹا سائنسدان غیر آرام دہ سوالات پوچھیں گے۔ آپ کو کتنا یقین ہے کہ آپ کے رجحان کے ماڈل نے تمام الجھنے والے عوامل کو اپنی گرفت میں لے لیا ہے؟ اگر آپ کو کوئی چیز یاد آتی ہے اور لاجسٹک ریگریشن غلط انتخاب کرنے کے امکان کا اندازہ لگاتا ہے تو کیا ہوگا؟ کیا ہوگا اگر نتیجے میں رجعت کی بھی غلط وضاحت کی گئی ہے کیونکہ کام کی تکمیل کا استفسار کے اعتماد کے ساتھ ایک غیر خطی تعلق ہے جسے ایک لکیری ماڈل حاصل نہیں کرسکتا؟
دو ماڈلز ہیں، اس بات کا یقین نہیں ہے کہ کون سا درست ہے، دونوں بوجھ اٹھا سکتے ہیں۔
آپٹ ان AI مصنوعات بنیادی طور پر اس دیوار سے ٹکراتی ہیں۔ بے ترتیب ہونے کے بغیر LLM پر مبنی تجربات کے لیے کازل انفرنس منتخب اور غیر منتخب صارفین کے لیے نتائج دے سکتا ہے۔
مسئلہ یہ ہے کہ گروپ نے اپنی مرضی کا انتخاب کیا۔ کوئی بھی ماڈل جو ہم کارآمد اثرات کی بازیافت کے لیے بناتے ہیں وہ ایک نامعلوم سچائی کا تخمینہ ہے۔
اگر پروپینسٹی ماڈل غلط ہے تو تن تنہا وزن ناکام ہو جائے گا۔ اگر نتیجے میں آنے والا ماڈل غلط ہے تو اکیلے ریگریشن ٹیوننگ ناکام ہو جائے گی۔ ہر طریقہ ایک واحد، صحیح طریقے سے متعین ماڈل پر شرط لگاتا ہے۔
دوہرا مضبوط تخمینہ، خاص طور پر Augmented Inverse-Probability Weighting (AIPW) تخمینہ لگانے والا، ایک مختلف طریقہ اختیار کرتا ہے۔ رجحان کے ماڈل اور نتیجہ کے ماڈل کو ایک واحد تخمینہ کار میں جوڑتا ہے جو اس وقت مطابقت رکھتا ہے جب دونوں میں سے کسی ایک کو درست طریقے سے بیان کیا گیا ہو۔ AIPW کے ناکام ہونے کے لیے دونوں کو بیک وقت ناکام ہونا چاہیے۔
یہ گارنٹی تخمینہ لگانے والے (اس کی تعمیر میں سرایت شدہ ریاضی کی خاصیت) کے تحت سیمی پیرامیٹرک کارکردگی کے نظریہ سے حاصل ہوتی ہے۔ اس کو فالتو انجینئرنگ کے طور پر سمجھو جو کہ وجہ کا نتیجہ ہے۔ یہ وہی غلطی رواداری کی منطق کا استعمال کرتا ہے جو ایک نوڈ کے ناکام ہونے پر تقسیم شدہ نظام کو آن لائن رکھتا ہے۔
اس ٹیوٹوریل میں، ہم scikit-learn کا استعمال کرتے ہوئے شروع سے AIPW کو نافذ کرتے ہیں، بوٹسٹریپ اعتماد کے وقفے شامل کرتے ہیں، اور ایک وقت میں ایک ماڈل کو جان بوجھ کر توڑ کر اس کی دگنی مضبوط خصوصیات کا مظاہرہ کرتے ہیں تاکہ یہ ظاہر کیا جا سکے کہ تخمینہ لگانے والے کے پاس ہے۔ شور مچانے والے AI پروڈکٹ کے تجربات چلانے والے ڈیٹا سائنسدانوں کے لیے جہاں تمام ماڈلز قریباً ہیں، یہ فریم ورک تخمینوں کو برقرار رکھنے میں مدد کرتا ہے۔
اس ٹیوٹوریل کے تمام کوڈ بلاکس ساتھی نوٹ بک میں آخر سے آخر تک github.com/RudrenduPaul/product-experimentation-causal-inference-genai-llm/tree/main/12_doubly_robust/ پر چلتے ہیں۔ لیپ ٹاپ فائل ہے۔ aipw_demo.ipynb.
انڈیکس
کیوں نہ کسی ماڈل پر بھروسہ کیا جاتا ہے۔
پروپینسیٹی سکور کے طریقے کامیاب ہونے کے لیے، انہیں ایک چیز کی ضرورت ہوتی ہے: ایک پروپینسیٹی ماڈل جو تمام الجھنے والے عوامل کو صحیح طریقے سے گرفت میں لے۔ کامیاب ریگریشن ایڈجسٹمنٹ کے لیے ایک چیز کی ضرورت ہوتی ہے: ایک نتیجہ کا نمونہ جو درست طریقے سے اس بات کی گرفت کرتا ہے کہ کس طرح کوویریٹس کا تعلق نتائج سے ہے۔ دونوں ہی اصل میں مضبوط حالات ہیں، اس لیے یہ بتانا تقریباً ناممکن ہے کہ آیا ایک یا دوسرا پورا ہوا ہے۔
ایل ایل ایم آپٹ ان تجزیہ میں تین مخصوص طریقوں سے پروپینسیٹی ماڈل ناکام ہو جاتے ہیں۔ سب سے پہلے، ایونٹ لاگ کا فنکشن خود آپٹ اِن فیصلے کے بہاو ہے۔ استفسار موصول ہونے پر صارف کے استفسار کا اعتماد اسکور ماڈل کی تشخیص کو ظاہر کرتا ہے۔ انتخاب کے لیے بنیادی محرک پیمائش کے نظام سے باہر ہے۔
دوسرا، لاجسٹک ریگریشن خود بخود نان لائنر تعاملات کو حاصل نہیں کر سکتا۔ اگر کارپوریٹ پلانز کے بھاری استعمال کنندگان ذاتی منصوبوں کے بھاری استعمال کنندگان سے یکسر مختلف شرح پر انتخاب کرتے ہیں، تو ایک اہم اثرات لاجسٹک ماڈل اس اہمیت کو مکمل طور پر کھو دے گا۔ تیسرا، غیر پیمائشی کنفاؤنڈرز تعمیر کے لحاظ سے پوشیدہ ہیں۔ اگر انجینئرنگ بلاگز پڑھنے والے طاقت ور صارفین مساوی صارفین کے مقابلے میں نمایاں طور پر زیادہ انتخاب کرتے ہیں جو نہیں کرتے ہیں، اور بلاگ کے سامعین کے سگنل کی کمی ہے، تو رجحان ماڈل ان صارفین کو غلط وزن تفویض کرے گا، چاہے وہ کتنا ہی اچھا کیوں نہ ہو۔
نتیجے میں ماڈل کئی وجوہات کی بناء پر ناکام ہو جاتا ہے۔ LLM سسٹم کی ٹاسک کی تکمیل کا انحصار استفسار کی پیچیدگی پر ہے، جو کہ بہت زیادہ شور ہے۔ یہ ماڈل ورژن پر منحصر ہے جسے شاید کوویریٹس نے پکڑا نہیں ہے۔ اور یہ اس بات پر منحصر ہے کہ آیا صارف کسٹم سسٹم پرامپٹ کے ساتھ انٹرپرائز ورک اسپیس میں تھا (ایک ایسا عنصر جو لاگ میں بالکل بھی نہیں ہو سکتا)۔ ان کوویریٹس پر لکیری رجعت فنکشن کی شکل کو کہیں غلط طریقے سے بیان کرے گا، اور تعصب کی سمت غیر متوقع ہوگی۔
عملی مسئلہ یہ ہے کہ آپ تصریح کے ٹیسٹ نہیں چلا سکتے جو یقینی طور پر اس بات کی تصدیق کرے گا کہ دو ماڈلز میں سے ایک درست ہے۔ توازن کی تشخیص ڈسپوزیشن کے معیار کو ظاہر کرتی ہے، اور دائرہ کار وہیں ختم ہو جاتا ہے۔ بے حساب رکاوٹ کا پتہ نہیں لگایا جا سکتا۔ بقایا پلاٹ اس بات کا تعین کرتے ہیں کہ نتیجے میں آنے والا ماڈل مشاہدہ شدہ ڈیٹا پر کتنا فٹ بیٹھتا ہے۔ تاہم، وہ ظاہر نہیں کر سکتے کہ کوویریٹس میں کیا کمی ہے۔ دونوں ماڈلز کو بہتر بنایا جا سکتا ہے، لیکن ہم ابھی تک نہیں جانتے کہ آیا انہوں نے بنیادی مسئلہ حل کر دیا ہے۔ یہ میرے خیال سے کہیں زیادہ مشکل ہے۔
شناخت کرنے والے تین مفروضے ہیں جو تمام رجحانات پر مبنی وجہ تجزیہ کی بنیاد رکھتے ہیں۔ ان تینوں کو AIPW یا کسی دوسرے تخمینہ کار کو درست وجہ اثرات فراہم کرنے کے لیے رکھنا ضروری ہے۔
-
مبہم نہیں (جسے مضبوط ignorability بھی کہا جاتا ہے): تمام متغیرات جو مشترکہ طور پر انتخاب کے امکان اور کام کی تکمیل کو متاثر کرتے ہیں ماپا جاتے ہیں اور ماڈل میں شامل ہوتے ہیں۔
-
نقل (مثبتیت): ہر صارف کے علاج یا کنٹرول گروپ میں ہونے کا غیر صفر امکان ہونا چاہیے۔ کوئی ذیلی گروپ مکمل طور پر اس بات کا یقین نہیں کر سکتا کہ آیا وہ حصہ لے گا یا نہیں۔
-
سوٹ بار: ہر صارف کا ممکنہ نتیجہ دوسرے صارفین کے علاج کی حیثیت سے متاثر نہیں ہوتا ہے، اور علاج کا صرف ایک ورژن ہے۔ AIPW اس ضرورت میں نرمی کرتا ہے کہ ماڈل ان مفروضوں کو درست طریقے سے پکڑتا ہے، لیکن خود ان مفروضوں کو ختم نہیں کرتا ہے۔ ان کے پاس ابھی بھی ڈیٹا ہونا باقی ہے، اور طریقہ کار کی چالاکی کی کوئی مقدار اسے تبدیل نہیں کرے گی۔
کیا ڈبل مضبوط تخمینہ اصل میں کرتا ہے
AIPW ریاضیاتی ضمانتیں فراہم کرتا ہے جو واحد ماڈل کے طریقے فراہم نہیں کرسکتے ہیں۔ اگر رجحان یا نتائج کا نمونہ درست طریقے سے بیان کیا گیا ہے، تو اندازے ایک جیسے ہوں گے۔ جب تک کم از کم ایک بازو برقرار رہتا ہے، تخمینہ لگانے والا کامیاب ہو جاتا ہے۔ تخمینہ لگانے والے کے ٹوٹنے کے لیے، دونوں ماڈلز کو بیک وقت ناکام ہونا چاہیے۔
AIPW تخمینہ لگانے والے کا مقصد ہے: اوسط علاج کا اثر (ATE) اوورلیپنگ پروپینسٹی سکور والے تمام صارفین کے لیے، یہ علاج کے اہداف کے اوسط علاج کے اثر سے مختلف ہے جن کے رجحان ہدف (ATT) سے مماثل ہیں۔ جھکاؤ تراشنا [0.01, 0.99] مؤثر آبادی کو مناسب اوورلیپ والے صارفین تک محدود کرتا ہے، لیکن تخمینہ لگانے والا اوورلیپ کے اس مخصوص علاقے کے لیے ATE کو برقرار رکھتا ہے۔
سرکاری:
ATE_AIPW = mean( m1(X) - m0(X) + T*(Y - m1(X)) / e(X) - (1-T)*(Y - m0(X)) / (1 - e(X)) )
کہاں:
-
e(X)رجحان کا سکور covariates کے پیش نظر، آپٹ ان کرنے کی پیشین گوئی کا امکان ہے۔ -
m1(X)علاج کے دوران متوقع نتائج (منتخب)۔ -
m0(X)یہ ایک پیشین گوئی شدہ نتیجہ ہے جسے آپ کنٹرول کر سکتے ہیں (غیر چیک شدہ)۔ -
Tعلاج کا اشارہ (1 = منتخب، 0 = منتخب نہیں) -
Yیہ ایک مشاہدہ شدہ نتیجہ ہے۔
اس ٹیوٹوریل میں تمام اعشاریہ کی قدریں تناسب کی نمائندگی کرتی ہیں۔ کام مکمل ہونے پر 0.08 کا تخمینہ 8 فیصد پوائنٹس کے برابر ہے۔
اظہار کے دو اہم حصے ہیں: پہلا حصہ ہے، m1(X) - m0(X)ایک خالص ریگریشن ایڈجسٹمنٹ ہے۔ یہ براہ راست دو پیشین گوئیوں کے نتائج سے متصادم ہے۔ دوسرا حصہ، IPW اصلاحی اصطلاح، اصل میں کیا ہوا اور رجعت کی پیشین گوئیوں کے درمیان وزنی بقایا جات کی گنتی کرتا ہے۔
اگر نتیجے میں آنے والا ماڈل کامل ہے، تو باقیات کو 0 کے طور پر جانچا جاتا ہے اور تصحیحیں ضائع ہو جاتی ہیں۔ اگر نتیجے میں آنے والا ماڈل غلط ہے، تو IPW درستگی پیشین گوئی کی غلطی کو ایڈجسٹ کرتی ہے اگر پروپینسیٹی ماڈل درست طریقے سے بیان کیا گیا ہو۔
ہم اس منطق کو ریورس میں چلاتے ہیں۔ اگر رجحان درست ہے تو، IPW اصلاحی شرائط کو خود ہی غیر جانبدارانہ تخمینہ لگانا چاہیے اور نتیجے میں آنے والے ماڈل کو صرف فرق کم کرنا چاہیے۔ یا تو بازو کافی ہوگا۔ تخمینہ لگانے والے کے ناکام ہونے کے لیے، دونوں کو ناکام ہونا چاہیے۔
اس خاصیت کو ڈبل مضبوطی کہا جاتا ہے اور اس کے عملی نتائج ہیں۔ AIPW غیر علامتی طور پر سیمی پیرامیٹرک ایفیشنسی فرنٹیئر تک پہنچ جاتا ہے جب دونوں ماڈلز کو صحیح طریقے سے بیان کیا جاتا ہے اور باقاعدگی کے حالات برقرار رہتے ہیں۔ یعنی، یہ اعداد و شمار سے اتنی ہی شماریاتی معلومات نکالتا ہے جتنی کہ ایک باقاعدہ تخمینہ لگانے والا کسی بڑے نمونے سے نکال سکتا ہے۔ عملی طور پر، کارکردگی میں اس اضافے کا مطلب ہے کہ زیادہ ڈیٹا اکٹھا کیے بغیر اعتماد کا سخت وقفہ۔
شرائط
Python 3.11 یا اس سے زیادہ، پانڈا اور سکِٹ لرن کا علم، اور رجعت اور الٹا امکانی وزن کی بنیادی سمجھ کی ضرورت ہے۔
اس ٹیوٹوریل کے لیے پیکجز انسٹال کریں۔
pip install numpy pandas scikit-learn scipy
متوقع پیداوار:
Successfully installed numpy pandas scikit-learn scipy
یہ چار پیکجز صرف انحصار ہیں۔ scikit-learn لاجسٹک اور لکیری ریگریشن ماڈل فراہم کرتا ہے۔ scipy کے ڈی ای کے ذریعہ چارٹ اسکرپٹ میں استعمال کیا جاتا ہے۔ کوئی causal inference لائبریریوں کی ضرورت نہیں ہے۔ AIPW تخمینہ لگانے والا اتنا آسان ہے کہ شروع سے بنایا جائے۔
مصنوعی ڈیٹاسیٹ حاصل کرنے کے لیے، ساتھی ریپوزٹری کو کلون کریں۔
git clone https://github.com/RudrenduPaul/product-experimentation-causal-inference-genai-llm.git
cd product-experimentation-causal-inference-genai-llm
python data/generate_data.py --seed 42 --n-users 50000 --out data/synthetic_llm_logs.csv
متوقع پیداوار:
Generated 50000 users → data/synthetic_llm_logs.csv
ڈیٹا جنریٹر 50,000 مصنوعی صارفین کو منگنی کی تہوں، استفسار کے اعتماد کے اسکور، آپٹ ان فلیگ، اور کام کی تکمیل کے نتائج کے ساتھ تیار کرتا ہے۔ ایجنٹ موڈ آپٹ ان کا اصل کازل اثر +8 فیصد پوائنٹس ہے، جنریٹر میں پکایا جاتا ہے تاکہ یہ یقینی بنایا جا سکے کہ ہر تخمینہ لگانے والا اسے درست طریقے سے ٹھیک کر لے۔
ورکنگ مثال سیٹ اپ
ڈیٹاسیٹ ایک SaaS پروڈکٹ کی تقلید کرتا ہے جہاں صارف زیادہ قابل ماڈل کے ذریعے چلنے والے ایجنٹ موڈ کا انتخاب کر سکتے ہیں۔ 50,000 صارفین میں، شرکت کے مرحلے کے لحاظ سے رضامندی کی شرحیں بہت مختلف ہوتی ہیں۔ یعنی 65% بھاری صارفین، 35% درمیانے صارفین، اور 12% ہلکے صارفین۔
کام کی تکمیل پر زمینی سچائی کازل اثر +8 فیصد پوائنٹس ہے۔ آپٹ ان اور غیر منتخب صارفین کے درمیان ایک سادہ موازنہ انتخابی تعصب کی وجہ سے تقریباً 3 کے ایک عنصر کے فرق کو بڑھا چڑھا کر پیش کرتا ہے (ایک تحریف جسے AIPW خاص طور پر درست کرنے کے لیے ڈیزائن کیا گیا ہے)۔
ڈیٹا لوڈ کریں اور سادہ اندازوں کا حساب لگائیں۔
import numpy as np
import pandas as pd
df = pd.read_csv("data/synthetic_llm_logs.csv")
T = df["opt_in_agent_mode"].values
Y = df["task_completed"].values
naive_ate = Y[T == 1].mean() - Y[T == 0].mean()
print(f"Naive ATE (unadjusted): {naive_ate:+.4f}")
print(f"N treated: {T.sum()}, N control: {(1-T).sum()}")
متوقع پیداوار:
Naive ATE (unadjusted): +0.2106
N treated: 13451, N control: 36549
ڈیٹا سیٹ لوڈ کریں اور بائنری پروسیسنگ انڈیکیٹر ڈسپلے کریں (opt_in_agent_mode) اور بائنری نتیجہ (task_completed)، جو علاج اور کنٹرول گروپس کے درمیان اوسط نتائج میں خام فرق کا حساب لگاتا ہے۔
سادہ تخمینہ +0.2106 تک پہنچ گیا (21 فیصد سے زیادہ پوائنٹس)، جو انتخابی تعصب کی وجہ سے نمایاں طور پر بڑھا ہوا ہے۔ انتہائی مصروفیت رکھنے والے صارفین کم مصروف صارفین کے مقابلے میں نمایاں طور پر زیادہ مصروف رہتے ہیں اور ہمیشہ زیادہ کاموں کو مکمل کرنے کی کوشش کرتے ہیں، قطع نظر اس کے کہ کون سا ماڈل استعمال کیا گیا تھا۔
بولی فرق زیادہ تر اس بات کی عکاسی کرتا ہے کہ کس نے رضامندی دی۔ ماڈل کی تبدیلیوں نے مشاہدہ شدہ اختلافات کے صرف ایک حصے میں حصہ لیا۔
ضمانت نظریہ میں آسان معلوم ہوتی ہے اور ڈیٹا میں برقرار رہتی ہے۔ 5-مرحلہ غلط تصریحات کا ٹیسٹ چلانے سے آپ کو بخوبی پتہ چل جائے گا کہ اصل پروسیسنگ اثر کے مقابلے میں انتخاب کا شور کتنا +0.2106 ہے۔
مرحلہ 1: رجحان ماڈل کو فٹ کریں۔
پروپینسٹی سکور ایک پیشین گوئی کا امکان ہے جسے صارف نے قابل مشاہدہ خصوصیات کے ساتھ منتخب کیا ہے۔ شرکت کے درجہ بندی پر لاجسٹک ریگریشن اور استفسار پر اعتماد اس ڈیٹاسیٹ کے لیے ایک اچھا نقطہ آغاز ہے۔
from sklearn.linear_model import LogisticRegression
# Build covariate matrix
X_df = pd.get_dummies(
df[["engagement_tier", "query_confidence"]],
drop_first=True
).astype(float)
X = X_df.values
# Fit propensity model
ps_model = LogisticRegression(max_iter=1000, C=1.0)
ps_model.fit(X, T)
e_hat = ps_model.predict_proba(X)[:, 1]
# Trim extreme propensities for numerical stability
e_hat = np.clip(e_hat, 0.01, 0.99)
print(f"Propensity range: {e_hat.min():.3f} to {e_hat.max():.3f}")
print(f"Mean propensity (treated): {e_hat[T == 1].mean():.3f}")
print(f"Mean propensity (control): {e_hat[T == 0].mean():.3f}")
متوقع پیداوار:
Propensity range: 0.114 to 0.675
Mean propensity (treated): 0.401
Mean propensity (control): 0.220
ایک گرم، شہوت انگیز مشغولیت کی تہہ کو انکوڈ کریں، استفسار کے اعتماد کو مسلسل متغیر کے طور پر رکھیں، اور آپٹ ان واقعات کی پیشین گوئی کرنے کے لیے لاجسٹک ریگریشن کو فٹ کریں۔
کہ predict_proba طریقہ ہر صارف کے لیے کلاس 1 کا امکان واپس کرتا ہے۔ یہ رجحان سکور ہے. اقدار کو کلپ کریں: [0.01, 0.99] AIPW فارمولے میں تقسیم بہ صفر کی غلطیوں سے بچنے کے لیے جب رجحان حد کے قریب ہو (کچھ ایسی چیز جسے کلپ دراصل روکتی ہے)۔
سنٹی چیک اس بات کی تصدیق کرتا ہے کہ علاج کے گروپ (0.401) میں کنٹرول گروپ (0.220) کی نسبت اوسط رجحان زیادہ ہے۔ یہ انتخاب کے پیٹرن سے مطابقت رکھتا ہے جس کی کوئی توقع کر سکتا ہے، اس لیے کہ بھاری استعمال کنندگان علاج کے گروپ میں زیادہ کثرت سے ظاہر ہوتے ہیں اور یہ کہ ماڈل صحیح طریقے سے انھیں اعلیٰ امکانات تفویض کرتا ہے۔
0.114 سے 0.675 تک رجحان کی حد اس بات کی تصدیق کرتی ہے کہ اوورلیپ مفروضہ ہے۔ اس کا مطلب یہ ہے کہ کسی بھی صارف کو 0 یا 1 کے قریب کوئی رجحان تفویض نہیں کیا جاتا ہے، لہذا ہر صارف کے کسی بھی گروپ سے تعلق رکھنے کا معنی خیز امکان ہوتا ہے۔
تخمینہ لگانے والے کو چھونے سے پہلے رجحان کی حد کی جانچ کریں۔ 0.114 اور 0.675 کے درمیان ایک تنگ رینج ڈپلیکیٹ برقرار رکھنے کی تصدیق کرتی ہے، جبکہ 0 یا 1 کے قریب اقدار خلاف ورزیوں کی نشاندہی کرتی ہیں۔

مرحلہ 2: نتیجے میں آنے والے ماڈل کو فٹ کریں۔
نتیجہ خیز ماڈل علاج اور کنٹرول گروپوں کے لئے الگ الگ کام کی تکمیل کی پیش گوئی کرتا ہے۔
ہم دو الگ الگ رجعت کی تربیت دیتے ہیں۔ پہلی ٹرین صرف علاج شدہ صارفین پر اور دوسری ٹرینیں صرف کنٹرول صارفین پر۔ اس کے بعد ہم ہر فرضی پروسیسنگ اسائنمنٹ کی بنیاد پر ڈیٹاسیٹ میں ہر صارف کے نتائج کی پیشین گوئی کرنے کے لیے دونوں کا استعمال کرتے ہیں۔
from sklearn.linear_model import LinearRegression
# Fit outcome model for treated users
m1_model = LinearRegression()
m1_model.fit(X[T == 1], Y[T == 1])
# Fit outcome model for control users
m0_model = LinearRegression()
m0_model.fit(X[T == 0], Y[T == 0])
# Predict counterfactual outcomes for all users
m1_hat = m1_model.predict(X) # predicted outcome if every user were treated
m0_hat = m0_model.predict(X) # predicted outcome if every user were control
# Regression adjustment estimate (outcome model only, no propensity)
ate_regression = (m1_hat - m0_hat).mean()
print(f"Regression adjustment ATE: {ate_regression:+.4f}")
متوقع پیداوار:
Regression adjustment ATE: +0.0847
اس بات کا تعین کرنے کے لیے کہ کوویریٹس کا اس گروپ کے نتائج سے کیا تعلق ہے، ہم علاج کیے جانے والے صارفین کے لیے ایک لکیری رجعت اور دوسری طرف کنٹرول کرنے والے صارفین کے لیے الگ رجعت کا اطلاق کرتے ہیں۔ پھر ہم پیش گوئی کرتے ہیں کہ آیا ہر صارف کے نتائج کو علاج ملا ہوگا (m1_hat) اور کنٹرول میں (m0_hat) پورے ڈیٹا سیٹ میں۔
رجعت سے ایڈجسٹ شدہ تخمینوں کی اوسط پیشین گوئی فرق ہے۔ یہ +0.0847 کے برابر ہے، جو کہ بولی +0.2106 کے مقابلے میں +0.08 کی اصل حقیقت کے بہت قریب ہے۔
ریگریشن ٹیوننگ نتیجے میں آنے والے ماڈل کا استعمال ہر صارف کے لیے گمشدہ جوابی حقائق پر الزام لگانے کے لیے کرتی ہے۔ 0.0847 اور 0.0800 کے درمیان بقیہ فرق خود نتیجے میں آنے والے ماڈل کی حدود کی عکاسی کرتا ہے، اور یہیں سے AIPW کا رجحان اسکور درست کرنے کے اقدامات کرتا ہے۔
مرحلہ 3: AIPW تخمینہ کنندہ میں یکجا کریں۔
ہم پروپینسیٹی سکور اور دونوں نتائج کی پیشین گوئیاں استعمال کر سکتے ہیں اور انہیں AIPW فارمولے میں جوڑ سکتے ہیں۔
from typing import Tuple
def calculate_aipw_ate(
Y: np.ndarray,
T: np.ndarray,
e_hat: np.ndarray,
m1_hat: np.ndarray,
m0_hat: np.ndarray
) -> Tuple[float, np.ndarray]:
"""
Augmented Inverse-Probability Weighting (AIPW) estimator.
Parameters
----------
Y : array-like, observed outcomes
T : array-like, binary treatment indicators
e_hat : array-like, estimated propensity scores P(T=1|X)
m1_hat : array-like, predicted outcomes under treatment
m0_hat : array-like, predicted outcomes under control
Returns
-------
float : estimated average treatment effect (ATE)
"""
# IPW correction for treated observations
ipw_treated = T * (Y - m1_hat) / e_hat
# IPW correction for control observations
ipw_control = (1 - T) * (Y - m0_hat) / (1 - e_hat)
# AIPW influence function per observation
phi = (m1_hat - m0_hat) + ipw_treated - ipw_control
return phi.mean(), phi
ate_aipw, phi_obs = calculate_aipw_ate(Y, T, e_hat, m1_hat, m0_hat)
print(f"AIPW ATE: {ate_aipw:+.4f}")
print(f"Naive ATE: {naive_ate:+.4f}")
print(f"Regression-only ATE: {ate_regression:+.4f}")
print(f"Ground truth: +0.0800")
متوقع پیداوار:
AIPW ATE: +0.0847
Naive ATE: +0.2106
Regression-only ATE: +0.0847
Ground truth: +0.0800
یہ فنکشن ہر مشاہدے کے لیے AIPW اثر و رسوخ کا حساب لگاتا ہے۔ پہلی مدت، m1_hat - m0_hatیہ ریگریشن ایڈجسٹمنٹ ہے۔ دوسری مدت، T * (Y - m1_hat) / e_hatعلاج شدہ صارفین کے لیے ایک IPW فکس ہے۔ ہم اصل نتیجہ اور ماڈل پیشین گوئی کے درمیان بقایا کو لیتے ہیں اور پھر معکوس رجحان سے وزن میں اضافہ کرتے ہیں۔ وہ صارفین جن کے منتخب ہونے کا امکان نہیں لگتا ہے وہ معاوضے کے لیے بڑے وزن حاصل کرتے ہیں کیونکہ علاج کے گروپ میں ان کی نمائندگی کم ہے۔ تیسری اصطلاح کنٹرول صارفین کے لیے ہم آہنگی کی اصلاح کا اطلاق کرتی ہے۔
AIPW تخمینہ حاصل کرنے کے لیے، ہم ہر مشاہدے کے لیے اثرات کی قدروں کا اوسط لگاتے ہیں۔ اس ڈیٹاسیٹ میں، یہ +0.0847 تک پہنچ جاتا ہے، جو صرف رجعت کے تخمینہ سے مطابقت رکھتا ہے۔ یہ بالکل وہی ہے جس کی آپ توقع کریں گے جب دونوں ماڈل مناسب طریقے سے بیان کیے جائیں گے۔ دونوں ورژن متفق ہیں، دونوں ہی +0.08 کی حقیقی قدر کے قریب ہیں، اور دونوں ہی بولی +0.2106 پر بالکل واضح ہیں۔ یہ فنکشن بھی واپس آتا ہے۔ phi_obsمرحلہ 5 میں غلط تصریح کی جانچ کے لیے مشاہدے کے لیے مخصوص اثرات کی قدریں درکار ہیں۔
مرحلہ 4: بوٹسٹریپ اعتماد کا وقفہ
اعتماد کے وقفوں کے بغیر پوائنٹ کا تخمینہ نامکمل ہے۔ سب سے صاف پیداواری نقطہ نظر نان پیرامیٹرک بوٹسٹریپ ہے۔ یعنی، ہم ڈیٹا کو تبدیل کرنے کے ساتھ دوبارہ نمونہ بناتے ہیں، ہر چیز کو شروع سے درست کرتے ہیں، اور دوبارہ نمونے کے اعداد و شمار کے تخمینے کی تقسیم کا فیصد لیتے ہیں۔
def bootstrap_aipw_ci(
df: pd.DataFrame,
X_cols: list,
treatment_col: str,
outcome_col: str,
n_bootstrap: int = 500,
seed: int = 7
) -> Tuple[np.ndarray, float, float]:
"""
Bootstrap AIPW ATE with 95% percentile confidence interval.
Refits propensity model, both outcome models, and AIPW
from scratch on each resample.
"""
rng = np.random.default_rng(seed)
n = len(df)
boot_estimates = []
X_all = pd.get_dummies(df[X_cols], drop_first=True).astype(float).values
T_all = df[treatment_col].values
Y_all = df[outcome_col].values
for _ in range(n_bootstrap):
# Resample with replacement
idx = rng.integers(0, n, size=n)
X_b, T_b, Y_b = X_all[idx], T_all[idx], Y_all[idx]
# Re-fit propensity
ps = LogisticRegression(max_iter=1000, C=1.0)
ps.fit(X_b, T_b)
e_b = np.clip(ps.predict_proba(X_b)[:, 1], 0.01, 0.99)
# Re-fit outcome models
m1 = LinearRegression().fit(X_b[T_b == 1], Y_b[T_b == 1])
m0 = LinearRegression().fit(X_b[T_b == 0], Y_b[T_b == 0])
m1_b = m1.predict(X_b)
m0_b = m0.predict(X_b)
# AIPW on bootstrap sample
ate_b, _ = calculate_aipw_ate(Y_b, T_b, e_b, m1_b, m0_b)
boot_estimates.append(ate_b)
boot_estimates = np.array(boot_estimates)
ci_low = np.percentile(boot_estimates, 2.5)
ci_high = np.percentile(boot_estimates, 97.5)
return boot_estimates, ci_low, ci_high
boot_dist, ci_lo, ci_hi = bootstrap_aipw_ci(
df,
X_cols=["engagement_tier", "query_confidence"],
treatment_col="opt_in_agent_mode",
outcome_col="task_completed",
n_bootstrap=500,
seed=7,
)
print(f"AIPW ATE: {ate_aipw:+.4f}")
print(f"95% Bootstrap CI: [{ci_lo:+.4f}, {ci_hi:+.4f}]")
print(f"Bootstrap std dev: {boot_dist.std():.4f}")
متوقع پیداوار:
AIPW ATE: +0.0847
95% Bootstrap CI: [+0.0744, +0.0952]
Bootstrap std dev: 0.0053
بحالی کے ساتھ، ہم بوٹسٹریپ کے 500 نمونے بنانے کے لیے 50,000 قطاروں کو دوبارہ نمونہ بناتے ہیں۔ ہر ایک نمونے پر، ہم پروپینسیٹی ماڈل کو شروع سے ریفٹ کرتے ہیں، دونوں نتائج کے ماڈلز کو شروع سے ریفٹ کرتے ہیں، اور متعلقہ نئے ڈیٹا کے لیے AIPW تخمینوں کا حساب لگاتے ہیں۔
ہر نمونے پر تمام ماڈلز کو ریفٹ کرنا ضروری ہے۔ اگر آپ ایک فکسڈ ماڈل سے صرف باقیات کو دوبارہ نمونہ بناتے ہیں، تو آپ ماڈل کے تخمینہ کی غلطیوں کی وجہ سے تغیر کو کم سمجھیں گے۔
95% اعتماد کا وقفہ ہے۔ [+0.0744, +0.0952]اس میں آرام سے +0.0800 کی حقیقی قدر شامل ہے اور بڑے مارجن سے بے ہودہ +0.2106 کو خارج کر دیتا ہے۔ بوٹسٹریپ کا معیاری انحراف 0.0053 ہے، لہذا تخمینوں میں نمونے لینے کا عام تغیر تقریباً 0.5 فیصد پوائنٹس ہے۔
مرحلہ 5: جان بوجھ کر غلط بیانی کے ذریعے ڈبل مضبوطی کی خاصیت کو ثابت کرنا
دوہری مضبوطی کی خاصیت عملی طور پر رکھتی ہے۔ آپ جان بوجھ کر ایک وقت میں ایک ماڈل کی غلط وضاحت کرکے اور یہ دیکھ کر کہ آیا AIPW رکھتا ہے اسے تجرباتی طور پر اپنے ڈیٹا سیٹ پر چیک کر سکتے ہیں۔
منظر نامہ 1: غلط رجحان کا ماڈل، صحیح نتیجہ کا ماڈل
0.3 کی مستقل قدر کے ساتھ تمام صارفین کے لیے تخمینی رجحان کے اسکور کو تبدیل کریں۔ یہ ڈیزائن کے لحاظ سے زیادہ سے زیادہ غلط بیان کردہ رجحان ماڈل ہے، کیونکہ تمام صارفین کا وزن یکساں ہوتا ہے قطع نظر ان کی شرکت کے درجے یا استفسار پر اعتماد۔ صرف IPW کو روکنا چاہئے۔ چونکہ نتیجے میں آنے والا ماڈل صحیح طریقے سے بیان کیا گیا ہے، اس لیے AIPW متاثر نہیں ہونا چاہیے۔
# Scenario 1: constant propensity (e = 0.3 for everyone)
e_wrong = np.full(len(df), 0.3)
# IPW with wrong propensity
t_mask = T == 1
c_mask = T == 0
ate_ipw_wrong = (
(Y[t_mask] / e_wrong[t_mask]).sum() / (1 / e_wrong[t_mask]).sum()
- (Y[c_mask] / (1 - e_wrong[c_mask])).sum() / (1 / (1 - e_wrong[c_mask])).sum()
)
# AIPW with wrong propensity but correct outcome models
ate_aipw_wrong_ps, _ = calculate_aipw_ate(Y, T, e_wrong, m1_hat, m0_hat)
print("=== Scenario 1: constant propensity (e = 0.3) ===")
print(f"IPW with wrong propensity: {ate_ipw_wrong:+.4f} (should be wrong)")
print(f"Regression adjustment (unchanged): {ate_regression:+.4f} (should be ~0.085)")
print(f"AIPW with wrong propensity: {ate_aipw_wrong_ps:+.4f} (should stay ~0.085)")
print(f"Ground truth: +0.0800")
متوقع پیداوار:
=== Scenario 1: constant propensity (e = 0.3) ===
IPW with wrong propensity: +0.2106 (should be wrong)
Regression adjustment (unchanged): +0.0847 (should be ~0.085)
AIPW with wrong propensity: +0.0847 (should stay ~0.085)
Ground truth: +0.0800
ہم تمام صارفین کے لیے یکساں رجحان کو 0.3 میں تبدیل کرتے ہیں اور دو چیزوں کا حساب لگاتے ہیں: پہلی، یہ خالص IPW ہے، صرف غلط رجحانات کا استعمال کرتے ہوئے۔ یہ ایک سادہ + 0.2106 پیدا کرتا ہے کیونکہ یہ ہر کسی کی شرکت کی کلاس سے قطع نظر یکساں وزن رکھتا ہے اور انتخاب کے نمونوں کو درست کرنے میں ناکام رہتا ہے۔
دوسرا، AIPW صحیح طریقے سے فٹ ہونے والے نتیجے کے ماڈل کو برقرار رکھتے ہوئے غلط رجحانات کا استعمال کرتا ہے۔ تخمینہ +0.0847 پر برقرار ہے۔ نتیجے میں آنے والی ماڈل کی اصطلاحات تخمینہ فراہم کرتی ہیں، اور IPW اصلاح شور کو جوڑتی ہے جس کا اوسط نمونے میں ہوتا ہے۔ ایک بازو ناکام ہو جاتا ہے اور دوسرا بازو تخمینہ لگانے والے سے گزر جاتا ہے۔
منظر نامہ 2: غلط نتیجہ ماڈل، صحیح رجحان ماڈل
اب صحیح تخمینہ شدہ رجحان کے اسکور رکھیں، لیکن نتیجے میں آنے والے دونوں ماڈلز کو مستقل کے ساتھ تبدیل کریں۔ سیٹ m1_hat = m0_hat = 0.5 یہ تمام صارفین کے لیے 50% کام مکمل کرنے کی شرح کی بے نتیجہ پیش گوئی ہے۔ صرف ریگریشن ایڈجسٹمنٹ کو صفر تک چھوٹا کیا جانا چاہئے۔ چونکہ رجحان کا ماڈل درست طریقے سے بیان کیا گیا ہے، اس لیے AIPW متاثر نہیں ہونا چاہیے۔
# Scenario 2: constant outcome models (m1 = m0 = 0.5 for everyone)
m1_wrong = np.full(len(df), 0.5)
m0_wrong = np.full(len(df), 0.5)
# Regression adjustment with wrong outcome models
ate_regression_wrong = (m1_wrong - m0_wrong).mean()
# Pure IPW with correct propensity (for comparison)
ate_ipw_correct = (
(Y[t_mask] / e_hat[t_mask]).sum() / (1 / e_hat[t_mask]).sum()
- (Y[c_mask] / (1 - e_hat[c_mask])).sum() / (1 / (1 - e_hat[c_mask])).sum()
)
# AIPW with correct propensity but wrong outcome models
ate_aipw_wrong_out, _ = calculate_aipw_ate(Y, T, e_hat, m1_wrong, m0_wrong)
print("=== Scenario 2: constant outcome models (m1 = m0 = 0.5) ===")
print(f"Regression with wrong outcome models: {ate_regression_wrong:+.4f} (should be 0.0)")
print(f"IPW with correct propensity: {ate_ipw_correct:+.4f} (should be ~0.085)")
print(f"AIPW with wrong outcome models: {ate_aipw_wrong_out:+.4f} (should stay ~0.085)")
print(f"Ground truth: +0.0800")
متوقع پیداوار:
=== Scenario 2: constant outcome models (m1 = m0 = 0.5) ===
Regression with wrong outcome models: +0.0000 (should be 0.0)
IPW with correct propensity: +0.0851 (should be ~0.085)
AIPW with wrong outcome models: +0.0849 (should stay ~0.085)
Ground truth: +0.0800
مستقل نتیجے میں آنے والے ماڈل کو 0.5 پر سیٹ کرنا ریگریشن ایڈجسٹمنٹ کی اصطلاح کا سبب بنتا ہے۔ m1_hat - m0_hat یہ بالکل 0 تک سکڑ جاتا ہے، بالکل بیکار تخمینہ۔ ایک خالص IPW ایک مناسب طریقے سے متعین رجحان ماڈل کا استعمال کرتے ہوئے +0.0851 کو خود ہی بحال کرتا ہے۔
AIPW غلط نتائج کے ماڈل کا استعمال کرتے ہوئے، لیکن درست رجحان بھی +0.0849 کو بحال کرتا ہے۔ اس کی وجہ یہ ہے کہ IPW اصلاحی اصطلاح اب تمام وزن رکھتی ہے۔ Y - 0.5 صحیح جواب الٹا رجحان کے ساتھ صحیح وزن اور اوسط کرکے حاصل کیا جاتا ہے۔ اگر نتیجے میں آنے والا ماڈل غلط ہے، تو یہ صرف تغیرات کا اضافہ کرتا ہے۔ تخمینہ لگانے والا مستقل رہتا ہے۔
دونوں منظرناموں کو چلانے سے ایک سنجیدگی کی جانچ پڑتال ہوتی ہے جسے داخلی تجزیہ دستاویزات میں شامل کیا جا سکتا ہے۔ ایک نظریاتی خاصیت سے دوہری مضبوطی کو ٹھوس اعداد میں تبدیل کرنا جو شک کرنے والوں کو دکھایا جا سکتا ہے۔
جب دوگنا مضبوط تخمینہ ناکام ہوجاتا ہے۔
AIPW ماڈل کی غلط تصریح کے خلاف تحفظ کی ایک واحد پرت فراہم کرتا ہے، جس میں نتائج پیش کرنے سے پہلے نام دینے کے قابل عملی حدود ہیں۔
دونوں ماڈلز کو ایک ہی وقت میں غلط طریقے سے بیان کیا گیا ہے۔
ڈبل مضبوطی کی گارنٹی لاگو ہوتی ہے چاہے ایک سے زیادہ ماڈل درست ہوں۔ اگر پروپینسٹی ماڈل مرکزی الجھنے والے عوامل سے محروم رہتا ہے اور نتیجے میں آنے والا ماڈل بھی حقیقی فنکشنل شکل کو حاصل کرنے میں ناکام رہتا ہے، تو AIPW کم غلط ماڈل کا تعصب رکھتا ہے۔
ایک غیر آرام دہ حقیقت: AIPW ہمیشہ ناپید افراتفری فراہم کرتا ہے۔ یہ آپ کو ایک مفت غلطی دیتا ہے۔ حد بالکل 1 ہے۔
انتہائی رجحان کے اسکور فرق کو بڑھاتے ہیں۔
چونکہ کچھ صارفین کا رجحان 0 یا 1 کے قریب ہے، اس لیے AIPW فارمولے میں IPW اصلاحی اصطلاح پھٹ جاتی ہے۔ کے ساتھ صارف e_hat = 0.02 کی ایک ترمیم پیدا کرتا ہے Y / 0.02 = 50 * Yاگر اس صارف کے نتائج غیر معمولی ہیں، تو وہ پورے تخمینہ لگانے والے پر غلبہ حاصل کر سکتے ہیں۔
تراشنے کا رجحان [0.01, 0.99] جیسا کہ یہاں کیا گیا ہے، صرف کم سے کم تحفظ فراہم کیا گیا ہے۔ پروپینسٹی ٹرمنگ (تجزیہ سے انتہائی اسکور والے صارفین کو ہٹانا) ایک صاف ستھرا حل ہے، حالانکہ اس سے اندازے بدل جاتے ہیں۔ اس کے بعد ہم اوور لیپنگ ریجن کے لیے ATE کا تخمینہ لگاتے ہیں، جو کہ پورے ڈیٹا سیٹ سے کم آبادی ہے۔ ان انتخاب کو واضح طور پر دستاویز کریں۔
محدود نمونے کا تغیر اس سے زیادہ ہے جو اسیمپٹوٹک تھیوری کی پیش گوئی کرتا ہے۔
AIPW بڑے نمونوں میں پابند نیم پیرا میٹرک کارکردگی حاصل کرتا ہے۔ 500 یا 1,000 مشاہدات کا استعمال کرتے ہوئے، IPW تصحیح کی اصطلاح کی متغیر افراط زر اہم ہو سکتی ہے اور بوٹسٹریپ اعتماد کے وقفے وسیع تر ہو سکتے ہیں۔
بہت چھوٹے تجربات میں، بے ہودہ ریگریشن ٹیوننگ مختصر وقفے فراہم کر سکتی ہے، حالانکہ غلط تصریح کے خلاف نظریاتی تحفظ کمزور ہے۔ AIPW کی کارکردگی کا فائدہ اس کی بڑی نمونہ نوعیت ہے۔
دونوں اجزاء کے لیے ماڈل کے انتخاب کو ابھی بھی فیصلے کی ضرورت ہے۔
لاجسٹک ریگریشن ایک معقول ڈیفالٹ ہے، لیکن اگر اصل انتخاب کے طریقہ کار میں اعلیٰ ترتیب کے تعاملات شامل ہیں جن کی مرکزی اثرات کا ماڈل نمائندگی نہیں کر سکتا، تو پروپینسیٹی ماڈل ان طریقوں سے منظم طریقے سے غلط ہو گا جن کو بیلنس کی تشخیص نہیں کر سکتا۔
بیرونی اجزاء (گریڈینٹ بوسٹنگ، بے ترتیب جنگلات) کے لیے زیادہ لچکدار ماڈلز کا استعمال بڑے نمونوں پر کارکردگی کو بہتر بناتا ہے، لیکن اس کے لیے کراس فٹنگ کی ضرورت ہوتی ہے۔ پیشن گوئی کرنے سے پہلے، ہم رجحان اور نتائج کے ماڈلز کو ہولڈ آؤٹ فولڈز میں فٹ کرتے ہیں تاکہ یہ یقینی بنایا جا سکے کہ AIPW کیلکولیشن میں تربیت کی غلطیاں نہ نکلیں اور حتمی تخمینہ غیر جانبدارانہ ہوں۔ کراس فٹنگ ہدف شدہ زیادہ سے زیادہ امکانی تخمینہ (TMLE) کے پیچھے ترتیب ہے۔
اسٹریٹجک نفاذ
اس ٹیوٹوریل کے آغاز سے عمل درآمد میکانزم کو ظاہر کرتا ہے۔ پروڈکشن سیٹ اپ کے لیے دو چیزوں کی ضرورت ہوتی ہے جو اس ورژن میں نہیں ہیں: لچکدار ماڈلز کا استعمال کرتے وقت اوور فٹنگ تعصب کو روکنے کے لیے کراس فٹنگ، اور ڈیٹا میں سگنلز سے ملنے کے لیے ایک لچکدار ڈیٹا انڈیپٹیو ڈسٹربینس ماڈل۔ اس ٹیوٹوریل کے شروع سے شروع ہونے والا سنجیدہ مشاہداتی مطالعہ کراس فٹنگ کے بغیر نہیں کر سکتا۔
TMLE کے ازگر پر عمل درآمد خصوصی کازل انفرنس لائبریریوں میں دستیاب ہے، ہر ایک AIPW اصولوں کو لے کر دونوں کو شامل کرتا ہے۔ TMLE دلچسپی کے تخمینے کو براہ راست نشانہ بناتا ہے، رجحان اور نتائج کے اجزاء کے لیے مشین لرننگ ماڈلز کا استعمال کرتے وقت ریگولرائزیشن تعصب کو درست کرتا ہے، اور درست اعتماد کے وقفے پیدا کرتا ہے یہاں تک کہ جب مداخلت کرنے والے ماڈلز کا اندازہ اسی ڈیٹا سے لگایا جاتا ہے۔
Lyft انجینئرنگ ٹیم نے رائیڈ شیئرنگ کازل انفرنس کے لیے ایک دوگنا طاقتور پائپ لائن کی تفصیلی وضاحت شائع کی ہے جو پروڈکشن ریٹنگ سسٹم بنانے سے پہلے پڑھنے کے قابل ہے (Nassiri & Chu, Lyft Engineering, 2026)۔
نظریاتی پس منظر کے لیے، AIPW کی توثیق Robins, Rotnitzky, and Zhao (Robins et al., 1994) کی ہے۔ یہ اہم ہے کیونکہ یہ ہمیں بالکل بتاتا ہے کہ طریقہ کار کی یقین دہانی کہاں رکتی ہے اور ماڈلنگ کا فیصلہ شروع ہوتا ہے۔
عملی نفاذ گائیڈ جو آپ یہاں دیکھ رہے ہیں اس سے بہت قریب سے میل کھاتا ہے UC Berkeley (van der Laan & Rose, 2011) میں مارک وان ڈیر لان کے ذریعہ تیار کردہ آبجیکٹیو لرننگ فریم ورک ہے۔
اس ٹیوٹوریل کے لیے ساتھی نوٹ بک github.com/RudrenduPaul/product-experimentation-causal-inference-genai-llm/tree/main/12_doubly_robust پر ہے۔ ریپوزٹری کو کلون کریں، ایک مصنوعی ڈیٹاسیٹ بنائیں، اور اسے کھولیں۔ aipw_demo.ipynb اس ٹیوٹوریل سے تمام کوڈ بلاکس کو دوبارہ تیار کریں، بشمول مسپیک منظرنامہ۔
پیداوار کے مشاہدے کے تجزیے کے لیے دو تخمینے ہیں، جن میں سے ایک دوسرے سے افضل ہے۔ اپنے ڈیٹا پر 5 قدمی غلط تصریح کا ٹیسٹ چلائیں۔ پروپینسٹی ڈائیگنوسٹک ہمیں بتاتا ہے کہ پروپینسٹی سیکشن کا کتنا وزن ہے، اور نتیجے میں آنے والے ماڈل کا بقایا پھیلاؤ ہمیں بتاتا ہے کہ ریگریشن ایڈجسٹمنٹ سیکشن کتنا کردار ادا کرتا ہے۔
AIPW کام کرتا ہے کیونکہ کسی بھی ماڈل کی توثیق نہیں کی گئی ہے اور یہ ان حالات کے لیے ڈیزائن کیا گیا ہے جس میں دونوں کام کرتے ہیں۔ اگر کوئی برداشت کرتا ہے تو اندازہ لگانے والا بھی۔