{count, plural, one {कोर्स} other {कोर्स}}
आप हाउसिंग प्राइस पर एक लीनियर रिग्रेशन मॉडल बना रहे हैं। रेजिडुअल प्लॉट मेगाफोन जैसा दिखता है (बाएँ संकरा, दाएँ फैलता हुआ)। मॉडल तकनीकी रूप से चलता है। बस नतीजे भरोसेमंद नहीं हैं। यह पैटर्न हेटेरोस्डैस्टिसिटी कहलाता है, और यह उन उल्लंघनों में से एक है जो बिना कोई साफ़ त्रुटि फेंके चुपचाप आपकी निष्कर्षों को अमान्य कर देता है।
एक विकल्प है रिस्पॉन्स वैरिएबल को ट्रांसफ़ॉर्म करना। और यह अंदाज़ा लगाने के बजाय कि लॉग, स्क्वायर रूट या रेसिप्रोकल आज़माएँ, आप डेटा को सही विकल्प सुझाने दे सकते हैं। यही बॉक्स-कॉक्स ट्रांसफ़ॉर्मेशन के पीछे का विचार है, और हम यहीं इसे कवर करेंगे: फ़ॉर्मूला, लैम्ब्डा कैसे चुनें, और इसे Python व R में कैसे लागू करें।
बॉक्स-कॉक्स ट्रांसफ़ॉर्मेशन क्या है?
बॉक्स-कॉक्स ट्रांसफ़ॉर्मेशन सख्ती से धनात्मक डेटा के लिए पावर ट्रांसफ़ॉर्मेशनों का एक परिवार है। कोई एक ट्रांसफ़ॉर्मेशन चुनने के बजाय, यह आपको पूरे दायरे में खोजने का तरीका देता है, जहाँ हर ट्रांसफ़ॉर्मेशन एक पैरामीटर लैम्ब्डा (λ) से इंडेक्स होता है।
जब लैम्ब्डा 0 होता है, तो आपको लॉग ट्रांसफ़ॉर्मेशन मिलता है। 0.5 होने पर यह स्क्वायर रूट के क़रीब होता है। -1 होने पर यह रेसिप्रोकल के पास होता है। ये सभी उसी फ़ॉर्मूले के विशेष मामले हैं, जिसका मतलब है कि आपको पहले से इनके बीच चुनना नहीं पड़ता। आप डेटा से अनुमान लगाते हैं कि कौन-सा सबसे अच्छा फिट बैठता है।
एक बात शुरुआत से साफ़ रखनी चाहिए: बॉक्स-कॉक्स बस "डेटा को नॉर्मल" नहीं बना देता। आपके मॉडलिंग समस्या पर निर्भर करते हुए, यह वैरिएंस को स्थिर करने, प्रेडिक्टर्स और रिस्पॉन्स के बीच रैखिकता सुधारने, या आपके मॉडल की धारणा को बेहतर तरीके से संतुष्ट करने में मदद कर सकता है। यह सख्ती से धनात्मक इनपुट मानों की भी मांग करता है। ज़ीरो और निगेटिव स्वीकार्य नहीं हैं। इस पर सीमाओं वाले भाग में और विस्तार से।
बॉक्स-कॉक्स ट्रांसफ़ॉर्मेशन कैसे काम करता है
फ़ॉर्मूले से पहले थोड़ी अंतर्दृष्टि बनाना ज़रूरी है। मान लें आपके पास साप्ताहिक बिक्री राजस्व जैसा वैरिएबल है जो दाहिनी ओर झुका हुआ है: दाईं ओर लंबी पूँछ, और माध्य के साथ बढ़ता वैरिएंस। सवाल यह है कि उस वैरिएबल की कौन-सी पावर एक अधिक सुव्यवस्थित रिस्पॉन्स की तरह बर्ताव करती है।
लैम्ब्डा के अलग-अलग मान उन ट्रांसफ़ॉर्मेशनों पर मैप होते हैं जिन्हें आप पहले से जानते हैं:
- lambda = 1: x का रैखिक शिफ्ट (वितरण का आकार बरकरार रहता है)
- lambda = 0: लघुगणकीय ट्रांसफ़ॉर्मेशन
- lambda = 0.5: स्क्वायर-रूट ट्रांसफ़ॉर्मेशन से संबंधित
- lambda = -1: रेसिप्रोकल ट्रांसफ़ॉर्मेशन से संबंधित
मानक बॉक्स-कॉक्स फॉर्म्युलेशन में स्केलिंग और ट्रांसलेशन कन्वेंशन शामिल होते हैं, इसलिए इन्हें शाब्दिक रूप से समान फॉर्मूले नहीं, बल्कि परिचित समतुल्य के रूप में समझना बेहतर है। लॉग वाला मामला (lambda = 0) सीमा के रूप में लिया जाता है। वहाँ फ़ॉर्मूला ln(x) में इसलिए बदलता है क्योंकि सततता का तर्क है, न कि मनमाना अपवाद।
बॉक्स-कॉक्स ट्रांसफ़ॉर्मेशन फ़ॉर्मूला
मानक पीसवाइज़ फ़ॉर्मूला यह है:

यहाँ x वह धनात्मक मान है जिसे ट्रांसफ़ॉर्म किया जा रहा है और लैम्ब्डा ट्रांसफ़ॉर्मेशन पैरामीटर है। (xλ - 1) / λ वाला रूप पहले थोड़ा अपरिचित लग सकता है। यही वह स्केलिंग कन्वेंशन है जो लैम्ब्डा के शून्य की ओर बढ़ने पर ट्रांसफ़ॉर्मेशन को सतत रखता है। इसके बिना, lambda = 0 पर एक जंप डिसकॉन्टिन्यूटी होती और लॉग वाला मामला परिवार के बाकी हिस्सों से पूरी तरह अलग हो जाता। इसके साथ, फ़ॉर्मूला lambda → 0 पर सुचारु रूप से ln(x) में ट्रांज़िशन करता है।
अभी व्युत्पत्ति की चिंता न करें। व्यावहारिक रूप से: लैम्ब्डा चुनें या आँकें, अपने धनात्मक मान डालें, और ट्रांसफ़ॉर्म किए गए आउटपुट के साथ काम करें।
बॉक्स-कॉक्स ट्रांसफ़ॉर्मेशन के लिए लैम्ब्डा कैसे चुनें
लैम्ब्डा कोई ऐसी चीज़ नहीं है जिसे आप सहजज्ञान से हाथों-हाथ सेट कर दें। आप इसे डेटा से आँकते हैं। यही बात बॉक्स-कॉक्स को बस "लॉग आज़माएँ" वाले अनुमान से अलग करती है। इसके पीछे एक ठोस सांख्यिकीय प्रक्रिया है।
मैक्सिमम लाइकलीहुड एस्टीमेशन
विचार यह है कि वह लैम्ब्डा खोजा जाए जो आपके डेटा को माने गए मॉडल में सबसे अच्छा फिट कर दे। रिग्रेशन संदर्भ में, इसका मतलब है वह लैम्ब्डा ढूँढ़ना जहाँ ट्रांसफ़ॉर्म किया गया रिस्पॉन्स मॉडल की धारणा—आमतौर पर रेजिडुअल्स की सामान्यता और स्थिर वैरिएंस—को सबसे नज़दीकी से संतुष्ट करता है। आप वह लैम्ब्डा नहीं चुन रहे जो रिस्पॉन्स के मार्जिनल वितरण को सबसे सामान्य जैसा दिखाए। आप वह चुन रहे हैं जो मॉडलिंग संदर्भ में सबसे अच्छा काम करता है। यह फर्क अहम है, और हम गलतियों वाले भाग में इस पर लौटेंगे।
बॉक्स-कॉक्स प्रोफ़ाइल लाइकलीहुड
यहाँ सबसे उपयोगी डायग्नॉस्टिक्स में से एक प्रोफ़ाइल लाइकलीहुड प्लॉट है: x-अक्ष पर लैम्ब्डा मान, y-अक्ष पर लॉग-लाइकलीहुड। शिखर अनुमानित इष्टतम लैम्ब्डा बताता है। उतना ही उपयोगी है उस शिखर के आसपास का कॉन्फिडेंस इंटरवल, जिसे आमतौर पर अधिकतम से नीचे किसी थ्रेसहोल्ड पर क्षैतिज रेखा के रूप में दिखाया जाता है। इस इंटरवल के भीतर आने वाला कोई भी लैम्ब्डा सांख्यिकीय रूप से इष्टतम से अभेद्य होता है।
एक व्याख्येय लैम्ब्डा चुनना
यहाँ एक व्यावहारिक बात जिसे लोग कम आँकते हैं। यदि इष्टतम लैम्ब्डा 0.43 जैसा कुछ हो, और 0.5 कॉन्फिडेंस इंटरवल के भीतर आता हो, तो 0.5 ही लें। स्क्वायर-रूट ट्रांसफ़ॉर्मेशन समझाना आसान है, बैक-ट्रांसफ़ॉर्म करना आसान है, और प्रदर्शन में लगभग कुछ नहीं खोता। यही तर्क 0 (लॉग) और 1 (कोई ट्रांसफ़ॉर्मेशन नहीं) पर भी लागू होता है। व्याख्येयता मायने रखती है, खासकर जब आप किसी ऐसे व्यक्ति को मॉडल समझा रहे हों जिसे 0.43 का मतलब न पता हो।
Python और R में बॉक्स-कॉक्स ट्रांसफ़ॉर्मेशन कैसे उपयोग करें
अब जबकि हमें पता है कि लैम्ब्डा क्या है और कैसे चुना जाता है, इसे अभ्यास में लगाते हैं। पहले Python, फिर R।
Python में बॉक्स-कॉक्स ट्रांसफ़ॉर्मेशन
SciPy का stats मॉड्यूल इसे सीधे संभालता है। boxcox() फ़ंक्शन एक ही कॉल में लैम्ब्डा का अनुमान लगाता है और ट्रांसफ़ॉर्म किए हुए मान लौटाता है। यहाँ सिम्युलेटेड राइट-स्क्यूड डेटा के साथ एक न्यूनतम उदाहरण है:
import numpy as np
from scipy import stats
# Simulate right-skewed data (e.g., weekly sales revenue in thousands)
rng = np.random.default_rng(42)
revenue = rng.exponential(scale=50, size=300)
# Confirm all values are positive before transforming
assert (revenue > 0).all(), "Box-Cox requires strictly positive values"
# Estimate lambda and transform
transformed, estimated_lambda = stats.boxcox(revenue)
print(f"Estimated lambda: {estimated_lambda:.4f}")
print(f"Original mean: {revenue.mean():.2f}, std: {revenue.std():.2f}")
print(f"Transformed mean: {transformed.mean():.2f}, std: {transformed.std():.2f}")
यहाँ estimated_lambda सामान्यता की धारणा के तहत लॉग-लाइकलीहुड को अधिकतम करता है। आप भविष्यवाणी के लिए नया डेटा ट्रांसफ़ॉर्म करते समय भी इसी मान का उपयोग करेंगे।
ध्यान दें कि यह लैम्ब्डा का अनुमान रिस्पॉन्स के मार्जिनल वितरण से लगाता है, न कि रिग्रेशन मॉडल के भीतर। मॉडलिंग वर्कफ़्लो के लिए, आप लैम्ब्डा का मूल्यांकन मॉडल संदर्भ में करेंगे। नीचे R का उदाहरण MASS के boxcox() का उपयोग करके यही दिखाता है।
R में बॉक्स-कॉक्स ट्रांसफ़ॉर्मेशन
R में, MASS पैकेज का boxcox() फ़ंक्शन रिग्रेशन वर्कफ़्लो के लिए बनाया गया है। यह एक फिटेड मॉडल ऑब्जेक्ट लेता है और सीधे प्रोफ़ाइल लाइकलीहुड प्लॉट करता है, जो स्वाभाविक रूप से अधिक उपयुक्त है क्योंकि आप किसी अकेले वेक्टर पर नहीं, बल्कि मॉडल के संदर्भ में लैम्ब्डा का आकलन कर रहे होते हैं।
library(MASS)
# Simulate right-skewed response (e.g., weekly revenue)
set.seed(42)
revenue <- rexp(300, rate = 1/50)
predictor <- rnorm(300)
# Fit initial model
initial_model <- lm(revenue ~ predictor)
# Estimate lambda via profile likelihood
bc_result <- boxcox(initial_model, lambda = seq(-2, 2, by = 0.1))
# Extract the lambda with highest log-likelihood
best_lambda <- bc_result$x[which.max(bc_result$y)]
cat("Best lambda:", round(best_lambda, 3), "\n")
# Refit with transformed response
revenue_transformed <- (revenue^best_lambda - 1) / best_lambda
final_model <- lm(revenue_transformed ~ predictor)
R का boxcox() प्रोफ़ाइल लाइकलीहुड को स्वतः प्लॉट करता है, इसलिए आपको कॉन्फिडेंस इंटरवल का विज़ुअलाइज़ेशन मुफ़्त में मिल जाता है। इससे यह तय करना आसान हो जाता है कि लैम्ब्डा को सरल मान पर राउंड किया जाए या नहीं।
बॉक्स-कॉक्स ट्रांसफ़ॉर्मेशन की व्याख्या और रिवर्स कैसे करें
जब आप रिस्पॉन्स को ट्रांसफ़ॉर्म करके मॉडल फिट कर लेते हैं, तो आपकी भविष्यवाणियाँ ट्रांसफ़ॉर्म्ड स्केल पर होती हैं, मूल स्केल पर नहीं। 3.2 की भविष्यवाणी का अर्थ (xλ - 1) / λ के 3.2 यूनिट हैं, राजस्व के 3.2 यूनिट नहीं।
कोएफ़िशिएंट्स की सावधानी से व्याख्या
ट्रांसफ़ॉर्मेशन के बाद कोएफ़िशिएंट्स की व्याख्या बदल जाती है। ट्रांसफ़ॉर्म्ड स्केल पर, किसी प्रेडिक्टर में एक यूनिट की वृद्धि y(λ) में निश्चित परिवर्तन से संबद्ध होती है, मूल y में नहीं। यदि लैम्ब्डा 0 के क़रीब है (लगभग-लॉग), तो आप मूल स्केल पर प्रतिशत परिवर्तन का अनुमान लगा सकते हैं। अन्य मानों के लिए, संबंध अधिक जटिल होता है और x के वर्तमान स्तर पर निर्भर करता है।
इनवर्स ट्रांसफ़ॉर्मेशन
भविष्यवाणियों को मूल स्केल पर वापस लाने के लिए, इनवर्स लागू करें:

lambda = 0 के लिए, ln(x) का इनवर्स बस exp(y) होता है।
रीट्रांसफ़ॉर्मेशन बायस पर एक टिप्पणी
ट्रांसफ़ॉर्म्ड स्केल पर अनुमानित माध्य को बैक-ट्रांसफ़ॉर्म करना आपको मूल स्केल पर माध्य का बिना बायस वाला अनुमान नहीं देता। यह जेनसन की असमानता का जाना-पहचाना परिणाम है, और यह खासकर लॉग-लिनियर मॉडलों में माध्य का पूर्वानुमान लगाने जैसी स्थितियों में मायने रखता है। बायस करेक्शन में गहराई तक जाना हमारे दायरे से बाहर है। यदि आप व्यापक संदर्भ चाहते हैं, तो हमारा Introduction to Regression in Python कोर्स रिग्रेशन मॉडलों में भविष्यवाणी और व्याख्या को व्यापक रूप से कवर करता है।
बॉक्स-कॉक्स बनाम अन्य ट्रांसफ़ॉर्मेशन
आपको वास्तव में कब बॉक्स-कॉक्स चुनना चाहिए बनाम वे विकल्प जो आप पहले से इस्तेमाल कर रहे होंगे?
बॉक्स-कॉक्स बनाम लॉग ट्रांसफ़ॉर्मेशन
लॉग ट्रांसफ़ॉर्मेशन बॉक्स-कॉक्स का lambda = 0 वाला मामला है। बस। यदि आपने पहले लॉग ट्रांसफ़ॉर्मेशन इस्तेमाल किया है, तो आपने बॉक्स-कॉक्स का एक विशेष इंस्टेंस इस्तेमाल किया है जिसमें लैम्ब्डा तय था, अनुमानित नहीं। बॉक्स-कॉक्स का फ़ायदा यह है कि यह पहले से lambda = 0 पर प्रतिबद्ध नहीं होता। फिर भी, यदि आपका प्रोफ़ाइल लाइकलीहुड साफ़ तौर पर lambda = 0 पर पीक करता है, तो लॉग ही इस्तेमाल करें। अनावश्यक जटिलता जोड़ने का कारण नहीं।
बॉक्स-कॉक्स बनाम येओ-जॉनसन ट्रांसफ़ॉर्मेशन
येओ-जॉनसन ट्रांसफ़ॉर्मेशन बॉक्स-कॉक्स का सीधा विस्तार है जो ज़ीरो और निगेटिव मानों को संभालने के लिए बनाया गया है। जब आपके डेटा में ज़ीरो (जैसे काउंट्स) या निगेटिव मान हों, तो यही अपनाएँ। ट्रांसफ़ॉर्मेशन गणितीय रूप से समान हैं। येओ-जॉनसन बस पॉज़िटिविटी की बाधा को ढीला करता है। scikit-learn में, PowerTransformer दोनों को सपोर्ट करता है, method='box-cox' और method='yeo-johnson', जिससे स्विच करना आसान हो जाता है।
बॉक्स-कॉक्स बनाम स्टैंडर्डाइज़ेशन
स्टैंडर्डाइज़ेशन (z-स्कोरिंग) डेटा को शिफ्ट और स्केल करता है: यह माध्य को 0 और मानक विचलन को 1 कर देता है। बॉक्स-कॉक्स नॉनलिनियर ट्रांसफ़ॉर्मेशन के ज़रिए वितरण का आकार बदलता है। ये अलग समस्याएँ हल करते हैं। स्टैंडर्डाइज़ेशन स्क्यूनेस नहीं घटाता और न ही वैरिएंस स्थिर करता है। बॉक्स-कॉक्स आपके डेटा को केंद्रित नहीं करता या फीचर्स को समान परिमाण का नहीं बनाता। आप क्रम में दोनों कर सकते हैं—पहले ट्रांसफ़ॉर्म, फिर स्टैंडर्डाइज़—पर ये विकल्प नहीं हैं।
सीमाएँ और आम गलतियाँ
इनमें से कुछ पीछे मुड़कर देखने पर स्पष्ट लगती हैं। फिर भी ये होती रहती हैं, और कुछ इतनी सूक्ष्म हैं कि "स्पष्ट" शब्द बहुत काम कर रहा होता है।
ज़ीरो या निगेटिव मानों पर बॉक्स-कॉक्स लगाना
फ़ॉर्मूला शून्य या उससे नीचे टूट जाता है। 0λ पॉज़िटिव लैम्ब्डा के लिए 0 होता है और निगेटिव लैम्ब्डा के लिए अपरिभाषित; log(0) ऋणात्मक अनंत है। यदि आपके डेटा में ज़ीरो या निगेटिव हैं, तो बॉक्स-कॉक्स या तो त्रुटि देगा या चुपचाप निरर्थक नतीजे देगा। इसके बजाय येओ-जॉनसन का उपयोग करें, या एक छोटा पॉज़िटिव कॉन्स्टेंट जोड़कर शिफ्ट करें। बाद वाला एक अनुमान है जिसे संदेह के साथ लेना चाहिए।
केवल नॉर्मैलिटी थोपने के लिए डेटा ट्रांसफ़ॉर्म करना
बॉक्स-कॉक्स किसी विशिष्ट मॉडलिंग समस्या—अस्थिर वैरिएंस, कमजोर रैखिकता, रेजिडुअल धारणाओं का उल्लंघन—के जवाब में लागू किया जाना चाहिए। इसे एक स्वतः प्रीप्रोसेसिंग स्टेप के रूप में इसीलिए न लगाएँ कि आपका मार्जिनल वितरण "नॉर्मल दिखे" और फिर कोई भी मॉडल फिट करें—यह उल्टा है। जो लैम्ब्डा आपके रिस्पॉन्स को अलग-थलग सामान्य जैसा बनाता है, वही जरूरी नहीं कि आपके मॉडल के रेजिडुअल्स में सुधार करे।
मॉडल डायग्नॉस्टिक्स की अनदेखी
लैम्ब्डा का अनुमान लगाना आधा काम है। ट्रांसफ़ॉर्म और रीफ़िट के बाद, अपने रेजिडुअल प्लॉट फिर देखें। बॉक्स-कॉक्स यह गारंटी नहीं देता कि धारणाएँ पूरी होंगी। यह बस आपको एक बेहतर मौका देता है। अगर रेजिडुअल्स अब भी फैल रहे हैं, या वक्रता है, तो कुछ और चल रहा है।
यह भूल जाना कि व्याख्या बदल जाती है
ट्रांसफ़ॉर्मेशन के बाद, कोएफ़िशिएंट्स मूल स्केल पर संबंधों का वर्णन नहीं करते। यह अक्सर नतीजे रिपोर्ट करते समय या भविष्यवाणी करते समय लोगों को उलझा देता है। हर चरण पर ध्यान रखें कि आप किस स्केल पर काम कर रहे हैं।
मॉडलिंग संदर्भ के बाहर लैम्ब्डा का मूल्यांकन
एकवेरिएट वितरण (सिर्फ अपने रिस्पॉन्स वैरिएबल के हिस्टोग्राम को देखकर) से अनुमानित लैम्ब्डा रिग्रेशन मॉडल के भीतर अनुमानित लैम्ब्डा से भिन्न हो सकता है। रिग्रेशन-आधारित तरीका सही है। लक्ष्य रेजिडुअल धारणाओं को संतुष्ट करना है, न कि मार्जिनल वितरण की धारणाओं को।
भविष्यवाणी करते समय ट्रांसफ़ॉर्मेशन लगाना भूल जाना
जब आप ट्रांसफ़ॉर्म्ड डेटा पर प्रशिक्षित मॉडल को डिप्लॉय करते हैं, तो आपको नए इनपुट्स पर भी वही लैम्ब्डा लगाकर ट्रांसफ़ॉर्म करना होता है और फिर भविष्यवाणियों को बैक-ट्रांसफ़ॉर्म करना होता है। किसी भी कदम को छोड़ देना आपको गलत स्केल पर भविष्यवाणियाँ देगा। यह सुनने में स्पष्ट लगता है, फिर भी अक्सर भुला दिया जाता है।
निष्कर्ष
बॉक्स-कॉक्स ट्रांसफ़ॉर्मेशनों का एक परिवार है, कोई एकल ट्रांसफ़ॉर्मेशन नहीं। लैम्ब्डा तय करता है कि उस परिवार का कौन-सा सदस्य आपको मिलता है, और लॉग ट्रांसफ़ॉर्मेशन बस lambda = 0 का विशेष मामला है। अधिकतर विश्लेषक बिना सोचे-समझे डिफ़ॉल्ट रूप से लॉग का उपयोग करते हैं। बॉक्स-कॉक्स इस चयन को स्पष्ट करता है और आपको यह पूछने का सुसंगत तरीका देता है कि क्या कोई और लैम्ब्डा मान वास्तव में मॉडल को बेहतर सेवा देगा।
इसे तब उपयोग करें जब आप कुछ विशिष्ट निदान कर रहे हों: रेजिडुअल्स में हेटेरोस्डैस्टिसिटी, नॉन-लिनियरिटी, या ऐसी धारणाएँ जो साफ़ तौर पर पूरी नहीं हो रहीं। हर रिस्पॉन्स वैरिएबल पर स्वतः लागू करना एक आदत है जिसे छोड़ना चाहिए। और यदि आपके डेटा में ज़ीरो या निगेटिव हैं, तो वह बॉक्स-कॉक्स का क्षेत्र नहीं है। वह येओ-जॉनसन का है।
रिग्रेशन विधियों में गहरी नींव के लिए, जिन्हें बॉक्स-कॉक्स आम तौर पर सपोर्ट करता है, हमारा Intermediate Regression in R कोर्स और Introduction to Regression with statsmodels in Python अच्छे अगले कदम हैं।
विनोद चुगानी ने टोक्यो में जेपीमॉर्गन के सबसे कम उम्र के हेज फंड सेल्स डेस्क हेड के रूप में अपना करियर शुरू किया और बाद में लेहमन ब्रदर्स में व्यक्तिगत बिक्री का रिकॉर्ड बनाया, फिर 30 देशों में फैला एक इलेक्ट्रॉनिक्स डिस्ट्रीब्यूशन व्यवसाय बनाया, जिसकी आय SG$100 मिलियन से आगे बढ़ी, इसके बाद उन्होंने डेटा की ओर रुख किया। ड्यूक में अर्थशास्त्र के स्नातक और NYC डेटा साइंस अकादमी के पूर्व छात्र, वे मेवन पर ह्यूगो बोव्न-एंडरसन के Building AI Applications कोर्स के लिए 100+ आवेदनों में से तीन छात्रवृत्ति प्राप्तकर्ताओं में से एक थे। आज, वे DataCamp, KDnuggets, Machine Learning Mastery, और Statology के लिए सांख्यिकी से लेकर एजेंटिक एआई तक के विषयों पर लिखते हैं, और NYC डेटा साइंस अकादमी में डेटा प्रोफेशनलों को मेंटर करते हैं, उनके नाम पर 1,000 से अधिक एक-से-एक सत्र हैं।
FAQs
क्या बॉक्स-कॉक्स ट्रांसफ़ॉर्मेशन के लिए इनपुट डेटा का सामान्य वितरण होना ज़रूरी है?
नहीं। बॉक्स-कॉक्स इनपुट वितरण के बारे में कोई धारणा नहीं बनाता, केवल यह कि मान सख्ती से धनात्मक हों। उद्देश्य ऐसा ट्रांसफ़ॉर्म्ड डेटा बनाना है जो डाउनस्ट्रीम मॉडल की धारणाओं—जैसे स्थिर वैरिएंस और रेजिडुअल्स की लगभग सामान्यता—को बेहतर ढंग से संतुष्ट करे। इनपुट का सामान्य होना आवश्यक नहीं है।
क्या मैं बॉक्स-कॉक्स को प्रेडिक्टर वैरिएबल्स पर लगा सकता/सकती हूँ, या केवल रिस्पॉन्स पर?
तकनीकी रूप से हाँ, लेकिन व्यवहार में इसे अधिकतर रिग्रेशन में रिस्पॉन्स वैरिएबल पर लागू किया जाता है, जहाँ लक्ष्य रेजिडुअल धारणाओं को संतुष्ट करना होता है। प्रेडिक्टर्स को ट्रांसफ़ॉर्म करना अलग समस्या है, जिसे आमतौर पर अलग तकनीकों से संबोधित किया जाता है। डेटा सेट की हर कॉलम पर बॉक्स-कॉक्स लगाना इसका उद्देश्य नहीं है।
यदि मेरे डेटा में ज़ीरो हैं तो मुझे क्या करना चाहिए?
बॉक्स-कॉक्स ज़ीरो या निगेटिव मानों को संभाल नहीं सकता क्योंकि वहाँ फ़ॉर्मूला अपरिभाषित है। आपके पास दो विकल्प हैं। पहला, येओ-जॉनसन ट्रांसफ़ॉर्मेशन अपनाएँ, जो इसी रूपरेखा को नॉन-पॉज़िटिव मानों तक बढ़ाता है। दूसरा, ट्रांसफ़ॉर्म करने से पहले एक छोटा पॉज़िटिव कॉन्स्टेंट जोड़कर डेटा को शिफ्ट करें, हालाँकि यह एक अनुमान है और लैम्ब्डा के आकलन को प्रभावित कर सकता है।
मॉडल ट्रेन करने के बाद नए डेटा पर बॉक्स-कॉक्स को सुसंगत रूप से कैसे लागू करूँ?
ट्रेनिंग के दौरान अनुमानित लैम्ब्डा को सहेजें। जब नया डेटा आए, तो उसी तय लैम्ब्डा का उपयोग करके वही फ़ॉर्मूला लागू करें। नए ऑब्ज़र्वेशनों पर लैम्ब्डा को फिर से न आँकें। scikit-learn के PowerTransformer में, fit() कॉल करने पर लैम्ब्डा संग्रहीत होता है और transform() उसे सुसंगत रूप से लागू करता है। पाइपलाइन के भीतर यही सबसे सुरक्षित तरीका है।
बॉक्स-कॉक्स फ़ॉर्मूला x^λ की बजाय (x^λ - 1) / λ का उपयोग क्यों करता है?
यह स्केलिंग कन्वेंशन लैम्ब्डा के शून्य के पास आने पर ट्रांसफ़ॉर्मेशन को सतत रखता है। (x^λ - 1) / λ रूप के बिना, फ़ॉर्मूला lambda = 0 पर उछलकर असतत हो जाता, बजाय इसके कि वह लॉग ट्रांसफ़ॉर्मेशन की ओर सुचारु रूप से अभिसरण करे। यह एक गणितीय सुविधा है जो सभी विशेष मामलों—लॉग, स्क्वायर रूट और रेसिप्रोकल—को एक ही जुड़े परिवार का हिस्सा बनने देती है।
क्या ट्रेनिंग डेटा पर अनुमानित लैम्ब्डा मेरे मॉडल की धारणाएँ अवश्य ठीक कर देगा?
नहीं। लैम्ब्डा का आकलन इस संभावना को बढ़ाता है कि आपके मॉडल की धारणाएँ बेहतर तरीके से पूरी होंगी, लेकिन यह गारंटी नहीं है। ट्रांसफ़ॉर्म और रीफ़िट के बाद, आपको रेजिडुअल प्लॉट्स फिर भी जाँचना चाहिए। यदि समस्याएँ बनी रहती हैं, तो संभव है कि उस डेटा सेट या मॉडल के लिए बॉक्स-कॉक्स सही औज़ार न हो।
SciPy में बॉक्स-कॉक्स और scikit-learn के `PowerTransformer` में क्या फर्क है?
SciPy का boxcox() एक सीधा सांख्यिकीय फ़ंक्शन है। यह लैम्ब्डा का अनुमान लगाता है और ट्रांसफ़ॉर्म किया हुआ एरे लौटाता है, जो स्टैंडअलोन विश्लेषण के लिए अच्छा काम करता है। scikit-learn का PowerTransformer method='box-cox' के साथ उसी तर्क को एक ट्रांसफ़ॉर्मर ऑब्जेक्ट में लपेटता है जो पाइपलाइनों में फिट होता है, fit() और transform() को अलग-अलग संभालता है, और येओ-जॉनसन को भी सपोर्ट करता है। मशीन लर्निंग वर्कफ़्लो के लिए, PowerTransformer आमतौर पर अधिक सुविधाजनक विकल्प है।
क्या मुझे थोड़ा अलग इष्टतम अनुमान होने पर भी राउंडेड लैम्ब्डा चुन लेना चाहिए?
अक्सर, हाँ। यदि इष्टतम लैम्ब्डा 0.48 है लेकिन प्रोफ़ाइल लाइकलीहुड प्लॉट के कॉन्फिडेंस इंटरवल में 0.5 आता है, तो स्क्वायर-रूट ट्रांसफ़ॉर्मेशन सांख्यिकीय रूप से उचित है और समझाने व इनवर्ट करने में कहीं आसान। प्रदर्शन का फ़र्क़ नगण्य होता है जबकि व्याख्येयता का लाभ वास्तविक। यही तर्क तब भी लागू होता है जब 0 (लॉग) या 1 (आकार-संरक्षण वाला शिफ्ट) इंटरवल के भीतर आते हों।
