آلات کے متغیرات کے ساتھ پروڈکٹ کے تجربات: ازگر میں ایل ایل ایم روٹنگ کے فیصلوں کو الجھانے سے گریز کریں۔

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

چاہے آپ اسے تسلیم کریں یا نہ کریں، آپ ایک کارآمد تخمینہ تجربہ چلا رہے ہیں اور آپ کے روٹنگ کے اصول خاموشی سے آپ کی کارکردگی کے تخمینے کو آلودہ کر رہے ہیں۔

ایک ایسے گیٹ وے پر غور کریں جو آنے والے سوالات کو پریمیم ماڈل تک لے جاتا ہے یا اعتماد کی حد کی بنیاد پر تیز، سستا متبادل۔ ایک مخصوص حد سے کم اعتماد کے اسکور والے سوالات کو پریمیم روٹ کیا جاتا ہے، جبکہ اس حد سے اوپر کے سوالات سستے روٹ کیے جاتے ہیں۔

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

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

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

معیاری رجعت ان دونوں سگنلز کو ایک واحد عدد میں ملا دیتی ہے، اور مشاہدہ شدہ لفٹ استفسار کی مشکل کو اتنا ہی ظاہر کرتی ہے جتنا کہ یہ ماڈل کے معیار کی عکاسی کرتی ہے۔

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

آلہ متغیر تجزیہ اس تعطل کو توڑنے کا ایک طریقہ ہے۔ استفسار کے معیار سے مکمل طور پر غیر متعلق وجوہات کی بناء پر، ہمیں تیسرے متغیر کی ضرورت ہے جو روٹنگ کو متاثر کرے۔

رفتار کی حد کی وجہ سے نقل مکانی صرف اتنا ہی ہے۔ جب ایک پریمیم ماڈل اپنی شرح کی حد تک پہنچ جاتا ہے، تو گیٹ وے سوال کی نوعیت سے قطع نظر، سستے ماڈل کی طرف استفسارات کا راستہ بدل دیتا ہے۔ شرح کی حد بندی بنیادی ڈھانچے کی وجوہات کی بناء پر نافذ کی جاتی ہے، قطع نظر اس کے کہ صارف اصل میں کیا درخواست کرتا ہے۔ یہ بے ترتیبی اہم ہے، اور دو مرحلے کے کم سے کم مربع (2SLS) ہمیں اس سے غیر مبہم وجہ کا تخمینہ نکالنے کی اجازت دیتا ہے۔

یہ ٹیوٹوریل آپ کو ازگر میں تشخیصی درستگی کی پوری ترتیب سے آگاہ کرتا ہے۔ روٹنگ کنفاؤنڈرز OLS کا تعصب کیوں کرتے ہیں، دو منسلک ریگریشنز میں شروع سے 2SLS کیسے بنایا جائے، پہلے مرحلے کے F-statistic کے ساتھ آلے کی طاقت کو کیسے چیک کیا جائے، اور مقامی اوسط علاج کے اثر کو کیسے بحال کیا جائے جس کا 2SLS اصل میں اوسط علاج کے اثر کو غلط سمجھنے کے بجائے تخمینہ لگاتا ہے۔ آخر تک، آپ جان لیں گے کہ اپنے لاگز میں کنفیوزنگ روٹنگ کے فیصلوں کو کیسے پہچانا جائے، انفراسٹرکچر سگنلز سے درست ٹولز جیسے ریٹ کو محدود کرنے والے فال بیکس کو کیسے بنایا جائے، اور حد سے زیادہ اعتماد والے اعتماد کے وقفوں کی بجائے مناسب سائز کے اعتماد کے وقفوں کا استعمال کرتے ہوئے کازل تخمینہ تیار کریں جو مینوئل 2SLS بطور ڈیفالٹ فراہم کرتا ہے۔

ساتھ والے نوٹ: اس مضمون کے تمام کوڈ بلاکس کو آخر سے آخر تک عمل میں لایا گیا ہے۔ iv_demo.ipynb ساتھی مخزن سے github.com/RudrenduPaul/product-experimentation-causal-inference-genai-llm/tree/main/11_instrumental_variables/.

انڈیکس

کیوں روٹنگ رجعت کو الجھاتی ہے۔

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

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

پیچیدہ سوالات کو مکمل کرنا زیادہ مشکل ہے، قطع نظر اس کے کہ کون سا ماڈل استفسار پر کارروائی کرتا ہے۔ جب آپ لکھتے ہیں task_completed ~ routed_to_premium + controls, controls شرائط پیچیدگی کے قابل مشاہدہ جہتوں کو جذب کر سکتی ہیں، جیسے استفسار کی لمبائی، صارف کی مصروفیت کا درجہ بندی، اور ہر چیز جو لاگ ان ہے۔

وہ جہت جس کا مشاہدہ نہیں کیا جا سکتا routed_to_premium ہم گتانک استعمال کرتے ہیں اور، خلل کی سمت کے لحاظ سے، تخمینہ کو نیچے کی طرف متعصب کرتے ہیں (پیچیدہ سوالات کے لیے بھیجے جانے والے پریمیم کم کثرت سے مکمل ہوتے ہیں، جس سے پریمیم واقعی ان سے بدتر نظر آتے ہیں) یا اوپر کی طرف۔

اس ٹیوٹوریل میں استعمال کیے گئے مصنوعی ڈیٹا سیٹ میں، OLS کا تخمینہ +3.3 فیصد پوائنٹس تک پہنچتا ہے، حالانکہ اصل کازل اثر +6 فیصد پوائنٹس ہے۔ یہ 2.7 پی پی کا نیچے کی طرف تعصب ہے، جو مکمل طور پر غیر مشاہدہ شدہ سوال کی پیچیدگی کی وجہ سے ہے۔

رجعت ٹھوس نظر آتی ہے، p-value نمایاں نظر آتی ہے، اور معیاری OLS آؤٹ پٹ میں کوئی ایسی چیز نہیں ہے جو کسی مسئلے کی نشاندہی کرتی ہو۔ یہی چیز اس ناکامی کے موڈ کو خطرناک بناتی ہے۔ یہ معیاری رجعت کی تشخیص کے لیے نظر نہیں آتا۔

2SLS بالکل اسی ڈھانچے کے لیے بنایا گیا تھا۔ روٹنگ کی مختلف حالتوں کے ایک بیرونی ذریعہ کی ضرورت ہے جو استفسار کے معیار سے غیر مربوط ہے۔ شرح کو محدود کرنے کی وجہ سے فال بیک یہ فراہم کرتا ہے۔

شکل 1: IV کازل ڈھانچہ۔ آلہ (Z = شرح کی حد کا متبادل) مطابقت کو پورا کرتا ہے (Z ایک روٹنگ پیشین گوئی ہے)، اخراج (نتیجے میں کوئی براہ راست Z نہیں ہے)، اور آزادی (Z غیر مشاہدہ شدہ سوال کی پیچیدگی کے ساتھ غیر منسلک ہے)۔ سرخ ڈیشڈ تیر الجھن کا راستہ دکھاتا ہے جو بولی OLS کا تعصب کرتا ہے۔

ایک آلہ متغیر کیا ہے؟

ایک ٹول ایک متغیر ہے جو ایک اینڈوجینس متغیر (روٹنگ کا فیصلہ) کو بغیر کسی دوسرے براہ راست نتیجہ (ٹاسک کی تکمیل) کو تبدیل کرتا ہے۔

چار مفروضے ایک درست ٹول کی وضاحت کرتے ہیں۔

مطابقت

آلہ کو درحقیقت اینڈوجینس متغیر کو متاثر کرنا چاہیے۔ فال بیک انڈیکیٹر کو محدود کرنے والا ریٹ جو پریمیم اہل استفسارات کے 15% پر چلتا ہے اس پر معنی خیز اثر ڈالے گا کہ آیا ان سوالات کو پریمیم کی طرف روٹ کیا گیا ہے۔

یہ قیاس قابل امتحان ہے۔ پہلے مرحلے کے F-statistic کے ساتھ چیک کریں۔ اسٹیگر اینڈ اسٹاک (1997) کے ذریعہ روایتی حد F> 10 مقرر کی گئی ہے، جو کہ بدترین صورت میں OLS کے مقابلے میں 2SLS تخمینہ کار کے لیے تقریباً 10% کے زیادہ سے زیادہ تعصب کے مساوی ہے۔

اینڈریوز، اسٹاک، اور سن (2019) کی حالیہ تحقیق سے پتہ چلتا ہے کہ چھوٹے نمونوں یا ایک سے زیادہ آلات کا استعمال کرتے ہوئے ترتیبات میں یہ حد بہت زیادہ جائز ہو سکتی ہے۔ محدود اعداد و شمار کے ساتھ پیداواری تجزیوں کے لیے، F> 10 کو کم سے کم سمجھا جاتا ہے اور نتائج کی اطلاع دینے سے پہلے اضافی حساسیت کی جانچ کے ذریعے تصدیق کی جاتی ہے۔ 10 سے کم کسی بھی چیز کا مطلب ہے کہ ٹول واضح طور پر کمزور ہے اور اندازے ناقابل اعتبار ہیں۔

اخراج کی پابندیاں

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

اس مفروضے کے لیے منطقی کاروباری استدلال کی ضرورت ہے اور اس کی تصدیق صرف ڈیٹا سے نہیں کی جا سکتی۔ مجموعی بنیادی ڈھانچے کے بوجھ سے شروع ہونے والے فال بیکس کا تعلق صارف کی درخواست یا کام کی دشواری سے نہیں ہے۔

آزادی

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

یکجہتی

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

اگر چاروں کو پکڑا جاتا ہے تو، 2SLS آلہ کے ذریعہ تیار کردہ روٹنگ میں صرف خارجی تبدیلیوں کا استعمال کرتے ہوئے ٹاسک کی تکمیل پر روٹنگ اثر کا ایک وجہ تخمینہ نکالتا ہے۔

شرائط

آپ کو درج ذیل کی ضرورت ہوگی:

اس ٹیوٹوریل کے لیے پیکجز انسٹال کریں۔

pip install numpy pandas statsmodels scipy

یہ ٹیوٹوریل میں استعمال ہونے والے چار پیکجوں کو انسٹال کرے گا۔ statsmodels OLS اور فارمولا API فراہم کرتا ہے، scipy بوٹسٹریپ قدم میں شماریاتی حساب کے لیے استعمال کیا جاتا ہے۔

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

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

اس بات کو یقینی بنانے کے لیے کہ نتائج اس کاغذ کے متوقع آؤٹ پٹ سے مماثل ہوں، ہم ساتھی ریپوزٹری کو کلون کرتے ہیں اور فکسڈ سیڈز کا استعمال کرتے ہوئے مشترکہ 50,000 صارف کے مصنوعی ڈیٹاسیٹ کو دوبارہ تخلیق کرتے ہیں۔

ورکنگ مثال سیٹ اپ

اس ٹیوٹوریل میں، ہم ایک مشترکہ ڈیٹاسیٹ سے صارف کوویریٹس کے اوپر تین نقلی متغیرات شامل کرکے کوڈ میں ایک مکمل IV کازل گراف بناتے ہیں۔

  • rate_limit_fallback: آلہ Z. خالص برنولی (0.15) کے ساتھ نمونہ، تمام سوالات کی خصوصیات سے مکمل طور پر آزاد۔

  • routed_to_premium_actual: اینڈوجینس پروسیسنگ D. روٹنگ دونوں کے ذریعے چلتی ہے۔ query_confidence (مشاہدہ) اور query_complexity (ناقابل مشاہدہ)، لہذا OLS متعصب ہے۔

  • task_completed_iv: نتیجہ Y. کو معلوم +6pp پریمیم روٹنگ اثر کا استعمال کرتے ہوئے IV causal گراف پر دوبارہ نقل کیا جا سکتا ہے تاکہ یہ دیکھا جا سکے کہ آیا تخمینہ لگانے والا زمینی سچائی کو بازیافت کرتا ہے۔

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

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

import numpy as np
import pandas as pd
import statsmodels.formula.api as smf

np.random.seed(42)

df = pd.read_csv("data/synthetic_llm_logs.csv")
rng = np.random.default_rng(99)
n = len(df)

# Unobserved confounder: complex queries route premium AND complete less often
query_complexity = rng.normal(0, 1, n)

# Endogenous routing: depends on query_confidence (observable)
# and query_complexity (unobserved): this is the confounding structure
log_odds = -2.0 + 4.0 * (1.0 - df["query_confidence"]) + 0.6 * query_complexity
premium_prob = 1.0 / (1.0 + np.exp(-log_odds))
df["routed_to_premium_iv"] = rng.binomial(1, premium_prob).astype(int)

# Instrument: pure Bernoulli(0.15), independent of all query characteristics
df["rate_limit_fallback"] = rng.binomial(1, 0.15, n)

# Actual routing: premium if intended, unless fallback overrides
df["routed_to_premium_actual"] = (
    df["routed_to_premium_iv"] * (1 - df["rate_limit_fallback"])
).astype(int)

# Outcome: known causal structure with +0.06 premium effect
engagement_base = np.where(df.engagement_tier == "heavy", 0.70,
                  np.where(df.engagement_tier == "medium", 0.55, 0.35))
completion_prob = np.clip(
    engagement_base
    + 0.06 * df["routed_to_premium_actual"]  # true causal effect
    - 0.04 * query_complexity                 # unobserved confounder
    + rng.normal(0, 0.02, n),
    0.01, 0.99
)
df["task_completed_iv"] = rng.binomial(1, completion_prob).astype(int)

# Encode engagement tier as dummies
df = pd.get_dummies(df, columns=["engagement_tier"], drop_first=True)
tier_dummies = [c for c in df.columns if c.startswith("engagement_tier_")]
covariate_str = " + ".join(["query_confidence"] + tier_dummies)

print(f"Rate-limit fallback rate:      {df.rate_limit_fallback.mean():.3f}")
print(f"Premium routing rate (actual): {df.routed_to_premium_actual.mean():.3f}")
print(f"Mean confidence | fallback=1:  {df[df.rate_limit_fallback==1].query_confidence.mean():.3f}")
print(f"Mean confidence | fallback=0:  {df[df.rate_limit_fallback==0].query_confidence.mean():.3f}")

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

Rate-limit fallback rate:      0.151
Premium routing rate (actual): 0.271
Mean confidence | fallback=1:  0.716
Mean confidence | fallback=0:  0.715

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

مرحلہ 1: بولی OLS (متعصب بیس لائن)

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

ols_formula = f"task_completed_iv ~ routed_to_premium_actual + {covariate_str}"
ols_model = smf.ols(ols_formula, data=df).fit(cov_type="HC3")

ols_coef = ols_model.params["routed_to_premium_actual"]
ols_se   = ols_model.bse["routed_to_premium_actual"]
ols_pval = ols_model.pvalues["routed_to_premium_actual"]
print(f"OLS estimate of premium routing effect: {ols_coef:+.4f}")
print(f"HC3 standard error:                      {ols_se:.4f}")
print(f"p-value:                                 {ols_pval:.4f}")

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

OLS estimate of premium routing effect: +0.0327
HC3 standard error:                      0.0050
p-value:                                 0.0000

یہاں کیا ہو رہا ہے: OLS +3.3 فیصد پوائنٹس (امکانی اکائیاں، اس کے بعد) بازیافت کرتا ہے۔ task_completed_iv ایک لکیری امکانی ماڈل میں، 0/1 ایک بائنری نتیجہ ہے)۔ اصل وجہ اثر +6.0pp ہے۔ 2.7pp تعصب غیر مشاہدہ شدہ استفسار کی پیچیدگی روٹنگ سے آتا ہے۔ زیادہ مشکل سوالات پریمیم روٹ کیے جاتے ہیں اور کم کثرت سے مکمل ہوتے ہیں۔ یہ نیچے کی طرف خلل کا طریقہ کار ہے۔ p-value اہم نظر آتی ہے اور معیاری غلطی درست دکھائی دیتی ہے۔ اس آؤٹ پٹ میں ایسا کچھ بھی نہیں ہے جو اس بات کی نشاندہی کرے کہ تخمینہ غلط ہے۔

ان نمبروں کو ذہن میں رکھیں۔ اسٹیج 2 کے 2SLS نتائج اس فرق کو ظاہر کرتے ہیں۔

مرحلہ 2: شروع سے دو مرحلے کے سب سے کم چوکور (2SLS)

دو مرحلے کے کم سے کم مربع ریٹ کی حد کے متبادل کے ذریعہ تیار کردہ خارجی روٹنگ تغیر کو الگ کر کے اور صرف اس تغیر کو استعمال کرتے ہوئے وجہ اثر کا تخمینہ لگا کر تعصب کو درست کرتے ہیں۔

مرحلہ 1: آلات اور covariates سے روٹنگ کی پیش گوئی کریں۔

stage1_formula = f"routed_to_premium_actual ~ rate_limit_fallback + {covariate_str}"
stage1 = smf.ols(stage1_formula, data=df).fit(cov_type="HC3")

print(f"Stage 1 instrument coefficient: {stage1.params['rate_limit_fallback']:+.4f}")
print(f"p-value:                         {stage1.pvalues['rate_limit_fallback']:.4f}")

df["rtp_hat"] = stage1.fittedvalues

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

Stage 1 instrument coefficient: -0.3190
p-value:                         0.0000

یہ کوڈ ڈیوائس کے اینڈوجینس روٹنگ متغیرات کو اسی مشاہدہ شدہ کوویریٹس پر واپس لے جاتا ہے جسے ہم مرحلہ 2 میں استعمال کریں گے۔

مناسب قیمت rtp_hat اس میں دو اجزاء ہیں: خارجی تغیر جس کی وضاحت آلہ کے ذریعہ کی گئی ہے اور خارجی تغیر جس کی وضاحت covariates کے ذریعہ کی گئی ہے۔

Endogenous اجزاء (متغیرات جو غیر مشاہدہ شدہ سوال کی پیچیدگی کے ساتھ منسلک ہوتے ہیں) باقیات میں رہتے ہیں۔ rtp_hat. منفی گتانک rate_limit_fallback مطابقت کے مفروضوں کو چیک کریں۔ فال بیک لاگو ہونے کے بعد، پریمیم روٹنگ کا امکان تقریباً 32 فیصد پوائنٹس کم ہو جاتا ہے۔

مرحلہ 2: پیشن گوئی روٹنگ کے رجعت کے نتائج۔

stage2_formula = f"task_completed_iv ~ rtp_hat + {covariate_str}"
stage2 = smf.ols(stage2_formula, data=df).fit(cov_type="HC3")

tsls_coef = stage2.params["rtp_hat"]
tsls_se   = stage2.bse["rtp_hat"]
print(f"2SLS estimate:              {tsls_coef:+.4f}")
print(f"Stage-2 SE (underestimate): {tsls_se:.4f}")

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

2SLS estimate:              +0.0599
Stage-2 SE (underestimate): 0.0188

موجودہ صورتحال کچھ یوں ہے: شفٹ routed_to_premium_actual کے ساتھ rtp_hat یہ روٹنگ تغیر کے اینڈوجینس حصے کو ہٹاتا ہے۔ دوسرے مرحلے کا گتانک (+0.0599) کام کی تکمیل پر پریمیم روٹنگ کے کازل اثر کا 2SLS تخمینہ ہے، جو زمینی سچائی سے تقریباً بالکل +0.06 اوپر ہے۔

معیاری غلطیوں کے بارے میں ایک اہم نوٹ: دستی 2SLS 2-اسٹیج SE تیار کرتا ہے جو بہت چھوٹا ہے۔ اسٹیج 2 OLS کا علاج rtp_hat یہ درحقیقت ایک مقررہ معلوم ریگریسر ہے جس کا اندازہ مرحلہ 1 میں ڈیٹا سے لگایا گیا ہے۔ تخمینہ کی خرابی ایک متغیر جزو کا اضافہ کرتی ہے جو مرحلہ 2 سے باقیات میں نظر نہیں آتا ہے۔

اسٹیک ہولڈرز کو نتائج کی اطلاع دینے کے لیے، استعمال کریں: linearmodels.IV2SLS (دیکھیں "آگے کیا کرنا ہے۔”) یہ صحیح سینڈوچ تغیر کا حساب لگاتا ہے۔

OLS اور 2SLS کا ساتھ ساتھ موازنہ کریں:

print(f"OLS estimate (biased):  {ols_coef:+.4f}")
print(f"2SLS estimate (IV):     {tsls_coef:+.4f}")
print(f"True premium effect:   +0.0600")
print(f"OLS bias:               {ols_coef - 0.06:+.4f}")

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

OLS estimate (biased):  +0.0327
2SLS estimate (IV):     +0.0599
True premium effect:   +0.0600
OLS bias:               -0.0273

یہاں OLS 2.7pp تک حقیقی اثر سے محروم ہے، جو کہ 45% کم تخمینہ ہے۔ 2SLS اسے 0.01pp کے اندر بحال کرتا ہے۔ خلا کی سمت اضطراب کے طریقہ کار کے مطابق ہے۔ غیر مشاہدہ شدہ استفسار کی پیچیدگی کی وجہ سے OLS کوفیشینٹس کو ایک پریمیم پر مشکل سوالات کو روٹ کرکے اور مکمل کو کم کرکے نیچے کی طرف ایڈجسٹ کیا جاتا ہے۔

dc39aa79-c955-4c4e-9962-f5a648d6e383

شکل 2: 50,000 صارفین کے ساتھ مصنوعی ڈیٹاسیٹ سے ڈیٹا پر مبنی نتائج۔ بائیں پینل: متبادل گروپوں کے ذریعہ روٹنگ کا تناسب ایک سطحی تعلقات کی تصدیق کرتا ہے۔ فال بیک=0 استفسار کا پاتھ پریمیم 39.1% ہے، فال بیک=1 استفسار کا پاتھ پریمیم 0% ہے (مکمل اوور رائڈ)۔ دائیں پینل: OLS CI (سرخ) اصل +0.06pp اثر کو مکمل طور پر کھو دیتا ہے۔ 2SLS CI (سبز) اس کا احاطہ کرتا ہے۔ وسیع تر 2SLS وقفے بازی کے اخراجات کی عکاسی کرتے ہیں جو صرف آلہ میں خارجی تغیرات پر منحصر ہوتے ہیں۔

مرحلہ 3: کمزور آلات کی تشخیص کریں۔

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

stage1_restricted = smf.ols(
    f"routed_to_premium_actual ~ {covariate_str}", data=df
).fit()

f_stat, f_pval, _ = stage1.compare_f_test(stage1_restricted)
print(f"First-stage F-statistic (instrument): {f_stat:.2f}")
print(f"p-value:                               {f_pval:.4f}")

if f_stat > 10:
    print("Instrument is STRONG (F > 10). 2SLS estimates are reliable.")
elif f_stat > 4:
    print("Instrument is BORDERLINE WEAK (4 < F < 10). Interpret with caution.")
else:
    print("Instrument is WEAK (F < 4). 2SLS estimates are unreliable.")

print(f"nFirst-stage coefficient on instrument: "
      f"{stage1.params['rate_limit_fallback']:+.4f}")

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

First-stage F-statistic (instrument): 3780.94
p-value:                               0.0000
Instrument is STRONG (F > 10). 2SLS estimates are reliable.

First-stage coefficient on instrument: -0.3190

اوپر والا کوڈ F-ٹیسٹ کا استعمال کرتا ہے تاکہ پہلے مرحلے کے مکمل ماڈل (آلات کے ساتھ) کا محدود ماڈل (بغیر آلات) سے موازنہ کیا جا سکے۔ 3780 کا F انگوٹھے کے Staiger-Stock کے اصول سے بہت زیادہ ہے۔ 50,000 مشاہدات پر لاگو ہونے والی 15% تعمیل کی شرح بڑے اور درست اندازے کے مطابق پہلے مرحلے کے اثرات پیدا کرتی ہے۔

F-statistic حقیقی پروڈکشن ڈیٹا سیٹس میں کم ہے جس میں کم لاگت کی شرح یا چھوٹے ڈیٹا سیٹ ہیں۔ اگر F-statistic 10 سے کم ہے، تو زیادہ طاقتور ٹول تلاش کریں یا نتیجہ اخذ کرنے سے پہلے مزید امپیٹیشن ڈیٹا شامل کریں۔

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

endogeneity کی سمت کو چیک کریں:

gap = ols_coef - tsls_coef
print(f"OLS minus 2SLS gap: {gap:+.4f}")
if abs(gap) > 0.005:
    print("Gap suggests endogeneity bias is present in OLS.")
else:
    print("Small gap: OLS and 2SLS broadly agree.")
print("For a formal Hausman endogeneity test, use linearmodels IV2SLS.")

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

OLS minus 2SLS gap: -0.0272
Gap suggests endogeneity bias is present in OLS.
For a formal Hausman endogeneity test, use linearmodels IV2SLS.

یہاں کیا ہو رہا ہے: OLS اور 2SLS کے درمیان فرق endogeneity کی تشخیص ہے۔ 2.7pp کا فرق اس بات کی تصدیق کرتا ہے کہ روٹنگ متغیر واقعی غیر مشاہدہ شدہ الجھنے والے متغیر کے ساتھ منسلک ہے اور یہ کہ OLS کچھ الجھنے والے متغیر اثر کو جذب کر رہا ہے۔

باضابطہ طور پر درست ہاؤسمین ٹیسٹ کے لیے (ایک ایسا ٹیسٹ جو کہ null کے تحت معلوم تقسیم کے ساتھ ایک chi-square statistic پیدا کرتا ہے)، استعمال کریں: linearmodels.IV2SLSیہ ایک بلٹ ان ٹیسٹ ہے۔ مندرجہ بالا واقفیت کی جانچ صرف ایک فوری تشخیص ہے۔

مرحلہ 4: تاخیر وہ مقدار ہے جس کا آپ اصل میں خیال رکھتے ہیں۔

2SLS مقامی اوسط علاج کے اثر (LATE) کا تخمینہ لگاتا ہے، جسے Complier Average Causal Effect (CACE) بھی کہا جاتا ہے۔ لیٹ صرف کمپائلرز پر لاگو ہوتا ہے۔ یعنی، یہ استفسارات کا ایک مخصوص ذیلی سیٹ ہے جس کے لیے روٹنگ دراصل تبدیل ہوتی ہے جب آلہ چلتا ہے۔ شرح کو محدود کرنا صرف پریمیم اہل استفسارات کو متاثر کرتا ہے جن کے لیے مواخذہ ہوتا ہے، اس لیے لیٹ صرف اس ذیلی آبادی پر لاگو ہوتا ہے۔

compliers_mask = df["rate_limit_fallback"] == 1
complier_count = compliers_mask.sum()
complier_pct   = complier_count / n * 100

print(f"Approximate complier population: {complier_count:,} ({complier_pct:.1f}% of queries)")
print(f"nComplier mean confidence:     {df[compliers_mask]['query_confidence'].mean():.3f}")
print(f"Non-complier mean confidence: {df[~compliers_mask]['query_confidence'].mean():.3f}")
print(f"n2SLS LATE estimate: {tsls_coef:+.4f}")
print("This is the causal effect of premium routing for queries rerouted")
print("by rate-limit fallbacks, not all queries in the dataset.")

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

Approximate complier population: 7,575 (15.2% of queries)

Complier mean confidence:     0.716
Non-complier mean confidence: 0.715

2SLS LATE estimate: +0.0599
This is the causal effect of premium routing for queries rerouted
by rate-limit fallbacks, not all queries in the dataset.

اس کوڈ میں، مرتب کرنے والے کی آبادی 7,575 سوالات ہیں (ایسے سوالات جو فال بیک کی شرح کو محدود کرنے کا تجربہ کرتے ہیں اور انہیں پریمیم سے کم لاگت میں تبدیل کیا جاتا ہے)۔ ان کا اوسط اعتماد (0.716) تقریباً غیر تعمیل کرنے والے گروپ (0.715) سے مماثل ہے، اس بات کی تصدیق کرتا ہے کہ سوال کی خصوصیات سے قطع نظر فال بیک پر عمل درآمد کیا گیا تھا۔

جب مرتب کرنے والا کسی قابل مشاہدہ پر تمام سوالات کے نمائندہ ٹکڑوں کو دیکھتا ہے، تو LATE اکثر اوسط پروسیسنگ ایفیکٹیونس (ATE) کا ایک معقول تخمینہ ہوتا ہے۔

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

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

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

دستی 2SLS دوسرے درجے کی معیاری غلطیاں پیدا کرتا ہے جو بہت چھوٹی ہیں، جیسا کہ مرحلہ 2 میں بیان کیا گیا ہے۔ بوٹسٹریپ CI درست تجزیاتی تغیر فارمولہ اخذ کرنے کی ضرورت کے بغیر غیر یقینی صورتحال کے قابل اعتماد تخمینہ فراہم کرتا ہے۔ بوٹسٹریپ پورے دو قدمی طریقہ کار کو ایک ساتھ دوبارہ نمونہ بناتا ہے، دونوں مراحل میں نمونے لینے کے تغیر کو پکڑتا ہے۔

rng_boot = np.random.default_rng(7)
ols_boot, tsls_boot = [], []

for _ in range(500):
    samp = df.sample(len(df), replace=True,
                     random_state=int(rng_boot.integers(1_000_000_000)))

    # OLS bootstrap
    ols_b = smf.ols(
        f"task_completed_iv ~ routed_to_premium_actual + {covariate_str}",
        data=samp
    ).fit()
    ols_boot.append(ols_b.params["routed_to_premium_actual"])

    # 2SLS bootstrap (two stages together)
    s1b = smf.ols(
        f"routed_to_premium_actual ~ rate_limit_fallback + {covariate_str}",
        data=samp
    ).fit()
    samp = samp.copy()
    samp["rtp_hat"] = s1b.fittedvalues
    s2b = smf.ols(
        f"task_completed_iv ~ rtp_hat + {covariate_str}",
        data=samp
    ).fit()
    tsls_boot.append(s2b.params["rtp_hat"])

ols_ci  = (np.percentile(ols_boot, 2.5),  np.percentile(ols_boot, 97.5))
tsls_ci = (np.percentile(tsls_boot, 2.5), np.percentile(tsls_boot, 97.5))
true_eff = 0.0600

print(f"OLS  95% CI: [{ols_ci[0]:+.4f}, {ols_ci[1]:+.4f}]")
print(f"2SLS 95% CI: [{tsls_ci[0]:+.4f}, {tsls_ci[1]:+.4f}]")
print(f"Ground truth: +{true_eff:.4f}")
print(f"OLS CI covers ground truth:  {ols_ci[0] <= true_eff <= ols_ci[1]}")
print(f"2SLS CI covers ground truth: {tsls_ci[0] <= true_eff <= tsls_ci[1]}")

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

OLS  95% CI: [+0.0227, +0.0426]
2SLS 95% CI: [+0.0247, +0.0969]
Ground truth: +0.0600
OLS CI covers ground truth:  False
2SLS CI covers ground truth: True

اس کوڈ کے لیے، OLS 95% CI ([+0.023, +0.043]) مکمل طور پر اصل +0.06 اثر سے محروم ہوگیا۔ اس وقفہ میں تمام اقدار اصل سچائی سے کم ہیں۔ OLS واضح طور پر غلط ہے۔ 2SLS CI([+0.025, +0.097]) اصل حقائق سے نمٹتا ہے۔ یہ OLS وقفہ سے زیادہ وسیع ہے، IV تخمینہ کی بازی لاگت کو ظاہر کرتا ہے۔ اس کا مطلب ہے کہ تاثیر حاصل کرنے کے لیے آپ کو اس کی درستگی کے ساتھ ادائیگی کرنی ہوگی۔

بوٹسٹریپ ہر تکرار پر دونوں مراحل کو دوبارہ نمونہ بناتا ہے، لہذا غیر یقینی صورتحال دو مراحل کی ساخت کو درست طریقے سے بیان کرتی ہے۔ دستی نفاذ سے 2SLS نتائج کی اطلاع دیتے وقت بوٹسٹریپ CI استعمال کریں۔ اس کی وجہ یہ ہے کہ یہ دوسرے درجے کے پیرامیٹر SE سے زیادہ مستحکم ہے۔

جب انسٹرومینٹل متغیرات ناکام ہوجاتے ہیں۔

IV تجزیہ میں پروپینسیٹی سکور یا ریگریشن ڈسکونٹیوٹی فیل موڈز کے مقابلے میں زیادہ کپٹی ناکامی کے طریقے ہوتے ہیں۔ اس کی وجہ یہ ہے کہ چار میں سے دو مفروضوں کو اکیلے ڈیٹا سے نہیں جانچا جا سکتا۔

کمزور آلہ

10 سے کم کا پہلا درجہ F ایک سنگین شناختی مسئلہ کی نشاندہی کرتا ہے۔ کمزور آلات کی وجہ سے 2SLS تخمینہ کنندہ محدود نمونوں میں بڑے تغیر کی طرف بڑھتا ہے اور OLS متعصب بیس لائن کو نقل کرتے ہوئے زیادہ نفیس کام انجام دیتا ہے۔ IV کے نتائج کی تشریح کرنے سے پہلے F-statistic چیک کریں۔

اگر F 10 سے کم ہے، تو ایک مضبوط پروڈکٹ تلاش کریں یا واضح کمزور مصنوعات کی وارننگ کے ساتھ تخمینہ کی اطلاع دیں۔ یہاں کا آلہ مضبوط ہے، کیونکہ 50,000 سوالات پر لاگو 15% فال بیک کی شرح 7,500 سے زیادہ روٹنگ تبدیلیاں (F = 3780) پیدا کرتی ہے۔

اخراج کی پابندیوں کی خلاف ورزی

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

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

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

دیر بمقابلہ ATE الجھن

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

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

باغی اور یکجہتی کے مفروضے۔

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

اگر معاوضے کا کچھ طریقہ کار موجود ہے (مثال کے طور پر فال بیک: ایک سوال اگلی استفسار کی ترجیحی بہتری کو متحرک کرتا ہے)، مسترد ہوجاتا ہے اور یکجہتی کا مفروضہ ٹوٹ جاتا ہے۔ دیر سے بھروسہ کرنے سے پہلے سمت کی مستقل مزاجی کو چیک کریں۔

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

اس ٹیوٹوریل میں دستی 2SLS کا نفاذ میکانزم کے لیے شفاف ہے، لیکن غلط معیاری خرابی پیدا کرتا ہے۔ ان نتائج کے لیے جو آپ اسٹیک ہولڈرز کو رپورٹ کرتے ہیں یا شائع شدہ تجزیوں میں شامل کرتے ہیں، استعمال کریں: linearmodels.IV2SLS:

# Production-grade 2SLS with correct standard errors
# pip install linearmodels
from linearmodels.iv import IV2SLS

exog_vars = ["query_confidence"] + tier_dummies
iv_model = IV2SLS.from_formula(
    f"task_completed_iv ~ 1 + {' + '.join(exog_vars)} "
    f"[routed_to_premium_actual ~ rate_limit_fallback]",
    data=df
).fit(cov_type="robust")

print(iv_model.summary)

موجودہ صورتحال کچھ یوں ہے: linearmodels یہ درست 2SLS تغیرات کی گنتی کرتا ہے جو دو مراحل کے ڈھانچے کو بیان کرتا ہے، مناسب پہلے مرحلے کے تشخیصی خلاصے چلاتا ہے، اور ایک رسمی Hausman endogeneity ٹیسٹ فراہم کرتا ہے۔ نحو قوسین میں endogenous متغیرات اور آلات کو بند کرتا ہے۔ [D ~ Z].

مکمل عمل درآمد (بشمول بوٹسٹریپ اعتماد کے وقفے اور شکل 2 میں تصورات) github.com/RudrenduPaul/product-experimentation-causal-inference-genai-llm/tree/main/11_instrumental_variables/ پر ساتھی نوٹ بک میں ہے۔ ریپوزٹری کو کلون کریں، ایک مصنوعی ڈیٹاسیٹ بنائیں، اور اسے چلائیں۔ iv_demo.ipynb شروع سے ختم تک ہر کوڈ بلاک کو دوبارہ پیش کریں۔

IV تک کب پہنچنا چاہیے اس کے بارے میں ایک حتمی نوٹ: اگر آپ کا سسٹم جبری روٹنگ رینڈمائزیشن کو سپورٹ کرتا ہے (بے ترتیب طور پر سوالات کا ایک حصہ پریمیم کو تفویض کرنا اعتماد کے اسکور سے قطع نظر)، معیاری A/B ٹیسٹنگ آسان ہے اور مجموعی طور پر ATE تخمینہ تیار کرتا ہے۔

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

Perturbation ایک بہتر روٹنگ سسٹم کا ساختی ڈیفالٹ ہے۔ معیاری ریگریشن ماڈل کے معیار اور اندرونی استفسار کی مشکل دونوں کو بیک وقت ماپتا ہے جب انہیں ایک عدد میں سمٹ کر الگ کیا جانا چاہیے۔

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

Scroll to Top