मज़बूत सांख्यिकी क्यों?
मानक विचलन प्रसार का एक शक्तिशाली माप है, लेकिन इसमें एक महत्वपूर्ण कमज़ोरी है: बहिर्वक्र मानों के प्रति अत्यधिक संवेदनशीलता। एक अकेला चरम मान SD को नाटकीय रूप से बढ़ा सकता है, जो विशिष्ट विचरण की भ्रामक तस्वीर देता है।
मज़बूत सांख्यिकी प्रसार के ऐसे माप प्रदान करती हैं जो बहिर्वक्र मानों के प्रभाव का प्रतिरोध करते हैं, जो उन्हें वास्तविक डेटा के लिए आवश्यक बनाता है जहाँ मापन त्रुटियाँ, डेटा प्रविष्टि गलतियाँ, या वास्तविक चरम मामले सामान्य हैं।
उदाहरण: बहिर्वक्र मान प्रभाव
टूटन बिंदु
माध्यिका पूर्ण विचलन (MAD)
MAD प्रसार का सबसे मज़बूत माप है। यह माध्यिका से निरपेक्ष विचलनों की माध्यिका की गणना करता है:
MAD सूत्र
माध्यिका ज्ञात करें
विचलनों की गणना करें
MAD ज्ञात करें
σ अनुमान के लिए MAD का मापक: सामान्य रूप से वितरित डेटा के लिए, MAD ≈ 0.6745 × σ। MAD से SD अनुमान लगाने के लिए, 1.4826 से गुणा करें:
MAD से SD अनुमान
1.4826 क्यों?
अंतर-चतुर्थक परिसर (IQR)
IQR मध्य 50% डेटा के प्रसार को मापता है—25वें और 75वें शतमक के बीच का परिसर:
IQR सूत्र
IQR व्यापक रूप से उपयोग किया जाता है क्योंकि यह समझने में सरल है, बॉक्स प्लॉट में दृश्यावलोकन करना आसान है, और बहिर्वक्र मान पहचान के लिए सामान्य “1.5×IQR नियम” का आधार बनाता है।
σ अनुमान के लिए IQR का मापन: सामान्य डेटा के लिए, IQR ≈ 1.35 × σ। IQR से SD अनुमान लगाने के लिए:
IQR से SD अनुमान
मज़बूत मापों की तुलना
मानक विचलन
MAD
IQR
मज़बूत सांख्यिकी कब उपयोग करें
- अन्वेषणात्मक विश्लेषण: जब आप नहीं जानते कि बहिर्वक्र मान मौजूद हैं या नहीं, मज़बूत मापों से शुरू करें
- डेटा गुणवत्ता समस्याएँ: जब डेटा में त्रुटियाँ या मापन समस्याएँ हो सकती हैं
- भारी-पूँछ वितरण: जब चरम मान अपेक्षित हों (वित्तीय प्रतिफल, बीमा दावे)
- छोटे प्रतिदर्श: जब कम प्रेक्षणों के कारण बहिर्वक्र मानों का बड़ा प्रभाव हो
- बहिर्वक्र मान पहचान: बहिर्वक्र मानों का पता लगाने के लिए SD का उपयोग करना वृत्तीय है; इसके बजाय IQR या MAD का उपयोग करें
कार्यान्वयन उदाहरण
import numpy as np
from scipy import stats
def mad(data):
"""Median Absolute Deviation"""
median = np.median(data)
return np.median(np.abs(data - median))
def scaled_mad(data):
"""MAD scaled to estimate SD (for normal data)"""
return 1.4826 * mad(data)
def iqr(data):
"""Interquartile Range"""
return np.percentile(data, 75) - np.percentile(data, 25)
# Compare on data with outlier
data = [10, 12, 11, 13, 12, 11, 100]
print(f"SD: {np.std(data, ddof=1):.2f}")
print(f"MAD: {mad(data):.2f}")
print(f"Scaled MAD: {scaled_mad(data):.2f}")
print(f"IQR: {iqr(data):.2f}")