लीनियर रिग्रेशन या T-टेस्ट। कैसे चुनें?
\ हम अक्सर फैंसी मशीन लर्निंग मॉडल्स और डीप लर्निंग की सफलताओं की चर्चा में उलझ जाते हैं, लेकिन आइए साधारण लीनियर रिग्रेशन को नज़रअंदाज़ न करें।
\ ==LLM और अत्याधुनिक आर्किटेक्चर की दुनिया में, लीनियर रिग्रेशन चुपचाप एक महत्वपूर्ण भूमिका निभाता है, और अब समय आ गया है कि हम यह दिखाएं कि यह आज भी कैसे लाभदायक हो सकता है।==
\ एक परिदृश्य पर विचार करें जहां एक ई-कॉमर्स कंपनी एक नया बैनर लॉन्च करती है, और हम औसत सत्र की लंबाई पर इसके प्रभाव का आकलन करना चाहते हैं। इसे प्राप्त करने के लिए, एक प्रयोग किया गया, और विश्लेषण के लिए डेटा एकत्र किया गया। आइए परिणामों का विश्लेषण करें।
आइए इस कार्य के लिए एक परिचित उपकरण का उपयोग करें: t-टेस्ट।
परिणाम काफी आशाजनक हैं:
मेट्रिक में वृद्धि केवल नियंत्रण और उपचार समूहों के नमूना औसत के बीच का अंतर है। हमारे मामले में, अनुमानित वृद्धि 0.56 मिनट है, जो दर्शाता है कि उपयोगकर्ता औसतन हमारे उत्पाद का उपयोग करते हुए 33 सेकंड अधिक समय बिताते हैं।
अब, आइए लीनियर रिग्रेशन का उपयोग उपचार वेक्टर (क्या नया बैनर दिखाया गया है या नहीं) को स्वतंत्र चर के रूप में और औसत सत्र की लंबाई को आउटपुट चर के रूप में करें।
फिर हम अपने मॉडल का सारांश प्रिंट करते हैं:
\
\ विशेष रूप से, उपचार चर के लिए गुणांक हमारे पहले के 0.56 की वृद्धि के अनुमान के साथ संरेखित होता है। यह ध्यान देने योग्य है कि R-squared केवल 0.008 है, और हम इस मॉडल के साथ विचरण की बहुत अधिक व्याख्या नहीं करते हैं।
क्या यह एक संयोग है कि t-टेस्ट से मिली वृद्धि और उपचार गुणांक समान हैं? आइए संबंध में गहराई से जाएं।
\ आइए सोचें कि उपचार चर क्या दर्शाता है। जब यह 1 के बराबर होता है, तो यह उन उपयोगकर्ताओं के लिए औसत सत्र की लंबाई को दर्शाता है जिन्होंने बैनर देखा; जब यह 0 के बराबर होता है, तो यह उन उपयोगकर्ताओं के लिए औसत सत्र की लंबाई को दर्शाता है जिन्होंने बैनर नहीं देखा। इसका मतलब है कि उपचार चर (या लीनियर रिग्रेशन शब्दों में स्लोप) नियंत्रण और उपचार समूहों के बीच माध्य में परिवर्तन को दर्शाता है।
लीनियर रिग्रेशन में उपचार चर के लिए शून्य परिकल्पना क्या है?
प्रयोग के लिए T-टेस्ट लागू करते समय शून्य परिकल्पना क्या है? यह बिल्कुल समान है।
इसलिए, समान परिकल्पनाओं के लिए t-सांख्यिकी और p-मान की गणना करते समय, हमारे निष्कर्ष सुसंगत और समान रहते हैं।
हालांकि, लीनियर रिग्रेशन का उपयोग करने के पीछे क्या कारण है? हम केवल चीजों को जटिल नहीं बनाना चाहते।
\ पहले, आइए सोचें कि क्या केवल उपचार हमारी प्राथमिक मेट्रिक में परिवर्तन के लिए जिम्मेदार है।
\ वास्तविकता में, यह चयन पूर्वाग्रह की उपस्थिति के कारण पूरी तरह से सटीक नहीं हो सकता है।
\ A/B परीक्षण में चयन पूर्वाग्रह एक प्रकार की त्रुटि है जब तुलना किए जा रहे समूहों के बीच एक व्यवस्थित अंतर होता है जो यादृच्छिक संयोग के कारण नहीं होता है, उदाहरण के लिए:
\
हम देखते हैं कि पुराने उपयोगकर्ता नए ग्राहकों की तुलना में अधिक बार नए बैनर के संपर्क में आते हैं।
\
यादृच्छिक आवंटन जो हम AB परीक्षणों में उपयोग करते हैं, हमें इसे कम करने में मदद करता है, लेकिन इसे पूरी तरह से समाप्त करना कठिन है।
\ आइए तैयार करें कि वास्तविक प्रभाव का अनुमान कैसे लगाया जाए।
ATE: औसत उपचार प्रभाव जिसका हम अनुमान लगाना चाहते हैं।
\ ATT: उपचारित लोगों का औसत उपचार प्रभाव। हम इसे ACE भी कह सकते हैं: औसत कारण प्रभाव। हम वास्तव में इसकी गणना कर सकते हैं। यह नियंत्रण और उपचार समूहों के नमूना औसत के बीच का अंतर है।
\ SB: चयन पूर्वाग्रह जिसे हम कम करना चाहते हैं।
\ हम इसे कैसे कम कर सकते हैं?
\ लीनियर रिग्रेशन हमें सहचर/भ्रमित करने वाले चर जोड़ने की अनुमति देता है। आइए इसे आज़माएं और भ्रमित करने वाले चर के रूप में उपयोगकर्ताओं के लिए प्रयोग से पहले औसत सत्र की लंबाई जोड़ें।
और मॉडल का सारांश प्रिंट करें:
हमारा R-squared आसमान छू गया है! अब, हम विचरण का 86% समझाते हैं।
\ हमारा उपचार प्रभाव अब 0.47 है।
तो, हमारे पास दो उपचार प्रभाव हैं: 0.47 और 0.56; कौन सा सही है?
\ इस मामले में, हम निश्चित रूप से वास्तविक प्रभाव जानते हैं क्योंकि मैंने डेटा का अनुकरण किया है और वास्तविक वृद्धि: 0.5
import numpy as np import pandas as pd from scipy import stats import statsmodels.api as sm np.random.seed(45) n = 500 x = np.random.normal(loc = 10 ,scale = 3, size= 2 * n) y = x + np.random.normal(loc = 2 , scale = 1 ,size = len(x)) # For 50% of users we simulate treatment effect treat = 1 * (np.random.rand(2 * n) <= 0.5) experiment = pd.DataFrame(x, columns=["covariate"]) experiment['metric'] = y experiment['treatment'] = treat experiment['noise'] = np.random.normal(size = len(experiment)) # Add noise and uplift to 'metric' for rows where 'treat' is equal to 1 # The real uplift is 0.5 experiment['metric'] = experiment.apply(lambda row: row['metric'] + 0.5 * row['treatment'] + row['noise'] if row['treatment'] == 1 else row['metric'], axis=1)
इसका मतलब है कि पूर्ण अंतर के संदर्भ में 0.47 बेहतर है और वास्तविक वृद्धि को प्रतिबिंबित करने के करीब है।
लीनियर रिग्रेशन का उपयोग करने के निम्नलिखित फायदे हैं:
\ क्या हम अन्य परीक्षणों के लिए लीनियर रिग्रेशन का उपयोग कर सकते हैं, जैसे कि Welch t-टेस्ट या Chi-square टेस्ट?
\ सरल उत्तर हां है। हालांकि, हमें कुछ समायोजन करने होंगे जिन पर हम अगले लेखों में चर्चा करने जा रहे हैं!


