बियॉन्ड द नॉर्म्स: एक्सप्लोरिंग द वर्ल्ड ऑफ आउटलेयर्स
कैसे आउटलेयर डेटा साइंटिस्ट को अपने पैर की उंगलियों पर रखते हैं
आउटलेयर वे बिंदु होते हैं जो डेटासेट में अधिकांश बिंदुओं से असामान्य दूरी पर होते हैं। इससे पहले कि हम किसी भी मशीन सीखने की समस्या को हल करने में गहराई से उतरें, यह आवश्यक नहीं होने पर आउटलेयर को हटाने का महत्वपूर्ण कदम है। आइए हम एक बाहरी की जड़ों पर चर्चा करें।
आउटलेयर के सामान्य कारण
- डेटा प्रविष्टि त्रुटि (मानव त्रुटि)
- प्रायोगिक त्रुटि
- माप त्रुटि (वाद्य त्रुटि)
- नमूनाकरण त्रुटि (विभिन्न/गलत स्रोतों से डेटा निकालना)
- जानबूझकर त्रुटि (पहचान विधियों का परीक्षण करने के लिए बनाई गई डमी आउटलेयर)
- प्राकृतिक त्रुटि (त्रुटि नहीं, डेटा में नवीनता)
1. आईक्यूआर (इंटरक्वेर्टाइल रेंज)
IQR डेटासेट का 50% मध्य है।
यह तृतीय चतुर्थक और प्रथम चतुर्थक (Q3 — Q1) के बीच मानों की श्रेणी है । डेटासेट को चतुर्थक में विभाजित करके परिवर्तनशीलता को मापने के लिए उपयोग किया जाता है। चतुर्थक वे मान होते हैं जो आपके डेटा को 4 भागों में विभाजित करते हैं बशर्ते डेटा आरोही क्रम में क्रमबद्ध हो।
IQR = Q3 — Q1
Q1 = पहला चतुर्थक (निचला चतुर्थक जो 25वां प्रतिशतक है जो डेटा के निचले 25% को विभाजित करता है)
Q2 = दूसरा चतुर्थक (माध्यिका जो 50वां प्रतिशतक है)
Q3 = तीसरा चतुर्थक (ऊपरी चतुर्थक जो 75वां प्रतिशतक है जो ऊपरी 25 को विभाजित करता है) % आंकड़े का)
नोट : प्रतिशत और प्रतिशतक दो अलग-अलग चीजें हैं। अगर 25वां पर्सेंटाइल 8 है तो इसका सीधा सा मतलब है कि 25% डेटा 8 से कम है। अगर 75वां पर्सेंटाइल 40 है तो इसका सीधा सा मतलब है कि 75% डेटा 40 से कम है।
यदि डेटा मान <Q1–1.5(IQR) या डेटा मान > Q3+1.5(IQR) है तो इसे एक बाहरी के रूप में माना जाता है।
#Python code for finding outliers
import numpy as np
data = [1,4,6,3,500,24,53]
sort_data = np.sort(data)
Q1 = np.percentile(data,25)
Q3 = np.percentile(data,75)
IQR = Q3-Q1
low_limit = Q1 - 1.5(IQR)
upper_limit = Q3 + 1.5(IQR)
outlier = []
for i in data:
if(i>upper_limit or i<low_limit):
outlier.append()
return outlier
इसे मानक स्कोर के रूप में भी जाना जाता है जो हमें यह अनुमान देता है कि डेटा बिंदु माध्य से कितनी दूर है। यह बताता है कि मानक विचलन में डेटा बिंदु माध्य से कितनी दूर विचलित होता है। हम जानते हैं कि यदि डेटा सामान्य वितरण का पालन करता है तो डेटा 99.7% बिंदुओं को 3 मानक विचलन तक कवर करता है। हम अपने आउटलेयर की गणना दोनों पक्षों से परे कर सकते हैं।
इसलिए यदि हमें 2.5 के रूप में जेड-स्कोर मिलता है तो हम कहते हैं कि यह औसत से 2.5 मानक विचलन है और यदि हमें -2.5 मिलता है तो हम कहते हैं कि यह औसत से 2.5 मानक विचलन है। इसलिए हम यह निष्कर्ष निकाल सकते हैं कि z-स्कोर ऊपर या नीचे के मानक विचलन का नहीं है, जिसका अर्थ है कि प्रत्येक मान गिरता है।
z-स्कोर का मुख्य लाभ यह है कि यह आपको बताता है कि % में कितना मान एक आउटलायर है।
Z स्कोर = (x-μ)/σ
x नमूने में एक अवलोकन है
x̄ नमूने में टिप्पणियों का मतलब है
σ नमूने में टिप्पणियों का मानक विचलन है
3. डेटा सॉर्ट करें और चरम मान देखें
यह मूल तरीका है जहां आप डेटा को सॉर्ट कर सकते हैं। उसके बाद चरम मूल्यों की तलाश करें और वह हमारा बाहरी होगा।
उदाहरण के लिए, हमें उम्र 4,6,9,2,10,12,102 दी गई है।
चरण 1: डेटा क्रमबद्ध करें: 2, 4,6,9,12,102
चरण 2: चरम मानों के लिए स्पॉट हम देख सकते हैं कि 102 चरम मूल्य है ताकि हमारे लिए यह एक बाहरी हो सकता है।
4. प्लॉटिंग स्कैटर प्लॉट, बॉक्सप्लॉट
- स्कैटरप्लॉट : यह एक अच्छा संकेतक है जो हमें यह देखने की अनुमति देता है कि क्या दो चरों के बीच पैटर्न है। इसका उपयोग तब किया जाता है जब आप संख्यात्मक डेटा जोड़ते हैं या जब आप दो चर के बीच संबंध निर्धारित कर रहे होते हैं। लेकिन इतना ही नहीं आप इसका इस्तेमाल आउटलाइयर डिटेक्शन के लिए भी कर सकते हैं।
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv("heart.csv")
fig,ax = plt.subplots(figsize = (10,6))
# Scatter with positive examples
pos = ax.scatter(df.age[df.target==1], df.thalach[df.target == 1], color="salmon", label="Heart Disease")
# Scatter with negative examples
neg = ax.scatter(df.age[df.target==0], df.thalach[df.target == 0], color="lightblue", label="No Heart Disease")
#customization
plt.title("Max heart rate in comparison to age")
plt.xlabel("Age")
plt.ylabel("Max heart rate")
plt.legend()
plt.show()
Visualization of Scatter plot
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
df = pd.read_csv("diabetes.csv")
#visualazing each feature to detect the presence of outliers
fig, axis = plt.subplots(nrows=1, ncols=8, figsize=(16, 6))
sns.boxplot(data=df[['Pregnancies']], ax=axis[0]);
sns.boxplot(data=df[['Glucose']], ax=axis[1]);
sns.boxplot(data=df[['BloodPressure']],ax=axis[2]);
sns.boxplot(data=df[['SkinThickness']], ax=axis[3]);
sns.boxplot(data=df[['Insulin']], ax=axis[4]);
sns.boxplot(data=df[['BMI']], ax=axis[5]);
sns.boxplot(data=df[['DiabetesPedigreeFunction']],ax=axis[6]);
sns.boxplot(data=df[['Age']], ax=axis[7]);
Visualization of Boxplot
पढ़ने के लिए धन्यवाद! यदि आप इस टुकड़े का आनंद लेते हैं और मेरे काम को और पढ़ना चाहते हैं, तो कृपया मुझे मीडियम पर फॉलो करने पर विचार करें। मैं भविष्य में आपके साथ और अधिक साझा करने के लिए उत्सुक हूं।