ڈیٹا سائنس بصیرت: گندے خوردہ ڈیٹا سے نمٹنا کیوں معنی خیز ہے۔

روزمرہ کی زندگی میں، ہم ہمیشہ لفظ ‘اوسط’ استعمال کرتے ہیں، جیسے کہ اوسط تنخواہ، اوسط گریڈ، اوسط عمر وغیرہ۔

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

مکمل

سوائے اس کے کہ کچھ عجیب لگتا ہے۔

اگر آپ باریک بینی سے دیکھیں تو آپ دیکھیں گے کہ زیادہ تر گاہک ₩(8 – ₩)15 مالیت کی اشیاء خرید رہے ہیں۔ تو $20 کہاں سے آتے ہیں؟

اس صورت میں، مسئلہ ڈیٹا نہیں ہے، لیکن اوسط ہے. یہ ایک صاف ستھرا درسی جال ہے جہاں نصابی کتاب میں موجود ہر چیز بالکل ٹھیک کام کرتی ہے، لیکن حقیقی ڈیٹا بھی کام نہیں کرتا۔

کچھ گاہک بڑی خریداری کرتے ہیں (بلک آرڈرز)، کچھ واپسی کے آرڈرز (منفی مقدار)، اور چند مستثنیات مجموعی تصویر کو متزلزل کرتے ہیں۔

اس مضمون میں، ہم ایک سادہ لیکن مشکل سوال کا جواب دینے کے لیے ایک آن لائن ریٹیل ڈیٹاسیٹ استعمال کریں گے۔ حقیقی دنیا میں "اوسط” کا واقعی کیا مطلب ہے؟

انڈیکس

شرطیں

یہاں پر عمل کرنے کے لیے آپ کو ضرورت ہو گی:

بنیادی ازگر کا علم: متغیرات اور افعال کو سمجھنا

پانڈا لائبریری: ڈیٹا لوڈنگ اور بنیادی ڈیٹا فریم آپریشنز کا علم۔

ترقی کا ماحول: Jupyter Notebook، VS Code، یا Google Colab جیسے ٹولز تک رسائی حاصل کریں۔

ڈیٹا سیٹ: اس تجزیہ کے لیے، ہم نے آن لائن ریٹیل ڈیٹا سیٹ کا استعمال کیا، جسے یہاں سے ڈاؤن لوڈ کیا جا سکتا ہے۔

ڈیٹا سیٹ

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

  1. ماخذ: UCI مشین لرننگ ریپوزٹری

  2. جمع کرنے والا: برطانیہ میں مقیم آن لائن خوردہ فروش (2010-2011)

  3. سائز: 541,909 لین دین

  4. خصوصیت: 8 پراپرٹیز (انوائس نمبر، اسٹاک کوڈ، تفصیل، مقدار، انوائس کی تاریخ، یونٹ قیمت، کسٹمر آئی ڈی، ملک)

  5. ملکیت: UCI کے زیر اہتمام عوامی ڈیٹا سیٹس

  6. پیٹنٹ: تحقیق اور تعلیم کے لیے کھلا۔

معنی: حساس دیو

شماریات اور ڈیٹا کے تجزیہ میں”اوسط"اور”ریاضی کا مطلب"اکثر ایک دوسرے کے ساتھ استعمال کیا جاتا ہے۔ ہمارا مقصد ڈیٹاسیٹ میں اوسط کل قیمت تلاش کرنا ہے۔ آن لائن ریٹیل ڈیٹاسیٹ کے تناظر میں، اوسط درج ذیل کے ذریعہ دی جاتی ہے:

$$text{اوسط آرڈر کی رقم} = frac{text{تمام کل قیمتوں کا مجموعہ}}{text{لین دین کی تعداد}}$$

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

# Load the dataset
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx"
df = pd.read_excel(url, engine="openpyxl")

# Clean and Feature Engineering
df = df.dropna(subset=['CustomerID'])
df['TotalPrice'] = df['Quantity'] * df['UnitPrice']

# Calculate the Mean (Average Order Value)
mean_value = df['TotalPrice'].mean()
print(f"Average Order Value (Mean): {mean_value:.2f}")

نتائج درج ذیل ہیں:

Average Order Value (Mean): 20.40

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

ذیل میں اوسط گراف پر ایک نظر ڈالیں۔

گراف آن لائن ریٹیل ڈیٹاسیٹ سے اوسط کل قیمت دکھاتا ہے۔ اوسط 20.42 ہے۔ (تصاویر مصنف کی طرف سے)

گراف درج ذیل ہے۔ تقسیم دائیں طرف مڑی ہوئی ہے۔ یہاں 20.40 کا حساب لگایا گیا اوسط دراصل ایک درسی کتاب کا جال ہے۔ سب سے زیادہ بار واضح طور پر ظاہر کرتا ہے کہ زیادہ تر لین دین (8 – )15 کی حد میں ہیں۔ سرخ لکیر کی طرف سے دائیں طرف کھینچا جا رہا ہے۔ لمبی دم کچھ گاہکوں کی طرف سے زیادہ قیمت والے بلک آرڈرز۔

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

سیدھے الفاظ میں، اوسط کو کچھ انتہائی اقدار کے ذریعہ دائیں طرف کھینچا جاتا ہے جو گراف پر نمایاں ہوتی ہیں، خاص طور پر وہ جو 200-300 کی حد میں ہیں۔

اگر آپ کی اوسط انتہائی قدروں سے متزلزل ہے، تو آپ کو ایک میٹرک کی ضرورت ہے جو ان آؤٹ لیرز سے متاثر نہ ہو۔ یہ وہ جگہ ہے جہاں میڈین کھیل میں آتا ہے۔

میڈین کی تعریف اس طرح کی گئی ہے: ڈیٹا کو ترتیب دینے کے بعد یہ درمیانی قدر ہے۔

ڈیٹا سیٹ میں، ہم تمام لین دین کو ترتیب دیتے ہیں اور درمیانی لین دین کو منتخب کرتے ہیں۔

میڈین کا حساب لگانے کا فارمولا یہ ہے:

$$text{Median} = begin{cases} X_{left[ frac{n+1}{2} right]} اور text{if } n text{ عجیب ہے} frac{X_{left[ frac{n}{2} right]} +[ frac{n}{2} + 1 right]}}{2} اور text{if } n text{is even} end{cases}$$

وسط کے برعکس، میڈین انتہائی قدروں پر منحصر نہیں ہے اور صرف ڈیٹا کے مقام کی پرواہ کرتا ہے، نہ کہ اس کے سائز کا۔

# Clean and Feature Engineering
df = df.dropna(subset=['CustomerID'])
df['TotalPrice'] = df['Quantity'] * df['UnitPrice']

# Calculate only the Median
median_value = df['TotalPrice'].median()
print(f"Typical Order Value (Median): {median_value:.2f}")

نتائج درج ذیل ہیں:

Typical Order Value (Median): 11.10

اب آپ دیکھ سکتے ہیں کہ نتائج (8 — )15 کی حد میں ہیں، جہاں زیادہ تر لین دین ہوتے ہیں۔

گاہک کے لین دین کی صحیح قیمت حاصل کرنے کے لیے تصویر ایک درمیانی گراف دکھاتی ہے۔

گاہک کے لین دین کی صحیح قیمت حاصل کرنے کے لیے تصویر ایک درمیانی گراف دکھاتی ہے۔ (تصاویر مصنف کی طرف سے)

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

اوپر کی تصویر میں درمیانی گراف بالکل نمایاں کریں جہاں آپ کے زیادہ تر گاہک ہیں۔

اوسط سے آگے: کوارٹائل کا استعمال کرتے ہوئے پھیلاؤ کو سمجھنا

ہم نے اب تک میڈین کا مطالعہ کیا ہے، لیکن صرف میڈین جاننا کافی نہیں ہے۔

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

کوارٹائل ڈیٹا سیٹ کو درج ذیل حصوں میں تقسیم کرتے ہیں:

  1. Q1 (25واں پرسنٹائل): 25% ٹرانزیکشنز اس سے کم ہیں۔

  2. Q2 (50 واں پرسنٹائل): درمیانی

  3. Q3 (75 فیصد): 75% ٹرانزیکشنز اس سے کم ہیں۔

اسے باضابطہ طور پر انٹرکوارٹائل رینج (IQR) کے طور پر ظاہر کیا جاتا ہے۔

$$IQR = Q_3 – Q_1$$

IQR: باہر کی شناخت

IQR درمیانی 50% میں پھیلاؤ کی پیمائش کرتا ہے۔

اگر IQR چھوٹا ہے، تو ڈیٹا مرتکز ہوتا ہے۔ بڑے سائز کے نتیجے میں ڈیٹا بکھر جاتا ہے۔ IQR ریاضی کے لحاظ سے باہر جانے والوں کی شناخت میں بھی مدد کرتا ہے۔

ظاہری اصول:

  1. لوئر باؤنڈ = Q1 – 1.5 * IQR

  2. اپر باؤنڈ = Q3 + 1.5 * IQR

IQR کو سمجھنے کے لیے ایک سادہ سی مثال

درج ذیل لین دین کی اقدار پر غور کریں:

$$بائیں[ 5, 8, 10, 12, 15, 18, 20 right]$$

مرحلہ 1: میڈین تلاش کریں (Q2):

درمیانی قدریں ہیں:

$$Q_2 = 12$$

مرحلہ 2: Q1 تلاش کریں (نچلا چوتھائی):

نچلا نصف [5, 8, 10]. نچلے نصف کے درمیانی حصے ہیں:

$$Q_1 = 8$$

مرحلہ 3: Q3 تلاش کریں (ٹاپ کوارٹائل):

پہلا نصف [15, 18, 20]. اوپری نصف کے لیے میڈین ہیں:

$$Q_3 = 18$$

مرحلہ 4: IQR کا حساب لگائیں:

$$IQR = Q_3 – Q_1 = 18 – 8 = 10$$

مرحلہ 5: باہر کی حدود تلاش کریں:

$$begin{aligned} text{lower bound} &= Q_1 – 1.5 times IQR = 8 – 15 = -7 text{upper bound} &= Q_3 + 1.5 times IQR = 18 + 15 = 33 end{aligned}$$

تمام اقدار -7 یا اس سے کم یا 33 یا اس سے زیادہ یہ ایک آؤٹ لیئر ہے (لیکن اس ڈیمو مسئلہ میں، آؤٹ لیرز موجود نہیں ہیں)۔

ڈیٹا سیٹ پر IQR لاگو کریں۔

ریٹیل ڈیٹاسیٹ میں صاف اقدار کی بجائے بڑی قدریں اور منفی واپسی ہوتی ہے۔

# 1. Calculate IQR and Bounds
Q1 = df['TotalPrice'].quantile(0.25)
Q3 = df['TotalPrice'].quantile(0.75)
IQR = Q3 - Q1

lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

اگر ہم اپنے ڈیٹاسیٹ کے لیے IQR کا حساب لگاتے ہیں، تو ہمیں ملتا ہے:

Lower Bound: -18.75
Upper Bound: 42.45
Number of Outliers: 33180

اعداد و شمار ڈیٹاسیٹ میں آؤٹ لیرز کی حد کو ظاہر کرتا ہے۔

گراف آؤٹ لیرز کو دکھاتا ہے، جو کہ -18.75 سے 42.45 کی حد سے باہر کی کوئی بھی قدریں ہیں۔ (تصاویر مصنف کی طرف سے)

جیسا کہ آپ گراف سے دیکھ سکتے ہیں، -18.75 سے 42.45 کی حد سے باہر کی قدروں کو باہر سمجھا جاتا ہے۔ اس قدر کو ہٹا دیا جائے گا۔

آؤٹ لیرز کو ہٹانے کے بعد اوسط پر دوبارہ جائیں۔

ہم نے انتہائی لین دین کو ختم کرنے کے لیے IQR طریقہ استعمال کیا جو ہماری عام اخراجات کی حد سے باہر ہیں۔

# Clean and Feature Engineering
df = df.dropna(subset=['CustomerID'])
df['TotalPrice'] = df['Quantity'] * df['UnitPrice']

# Original Mean
mean_value = df['TotalPrice'].mean()
print(f"Original Mean: {mean_value:.2f}")

# IQR Calculation
Q1 = df['TotalPrice'].quantile(0.25)
Q3 = df['TotalPrice'].quantile(0.75)
IQR = Q3 - Q1

# Define bounds
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

print(f"Lower Bound: {lower_bound:.2f}")
print(f"Upper Bound: {upper_bound:.2f}")

# Remove Outliers
df_no_outliers = df[(df['TotalPrice'] >= lower_bound) & (df['TotalPrice'] <= upper_bound)]

# New Mean after removing outliers
new_mean = df_no_outliers['TotalPrice'].mean()
print(f"Mean after removing outliers: {new_mean:.2f}")

دوبارہ حساب کرنے سے ہمیں ملتا ہے:

Original Mean: 20.40
Lower Bound: -18.75
Upper Bound: 42.45
Mean after removing outliers: 11.63

گراف دکھاتا ہے کہ تمام آؤٹ لیرز کو ہٹانے کے بعد اوسط میں نمایاں بہتری آتی ہے۔ (مصنف کی تصویر)

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

حتمی موازنہ اور بصیرت

تمام گرافس میں نتائج کو دیکھنا ڈیٹا سیٹ کی مکمل تفہیم فراہم کرتا ہے۔ اصل اوسط 20.40 تھی، جو اصل میں ہونے والے زیادہ تر لین دین سے بہت زیادہ تھی۔ اس معاملے میں، اوسط کو کچھ اعلیٰ قدر والے سودوں کے ذریعے اوپر کی طرف دھکیل دیا گیا تھا اور باہر کرنے والوں کے ذریعے اس کو متزلزل کیا گیا تھا۔

دوسری طرف، درمیانی قدر 11.10 تھی، جو اس حد کے اندر تھی جہاں زیادہ تر لین دین مرکوز تھے۔ اس سے ظاہر ہوتا ہے کہ ایک عام گاہک جو خرچ کرتا ہے اس کی اوسط زیادہ بہتر نمائندگی ہے کیونکہ یہ انتہائی اقدار سے متاثر نہیں ہوتا ہے۔

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

نتیجہ

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

یہ ایک اہم سبق پر روشنی ڈالتا ہے۔ اوسط غلط نہیں ہیں، لیکن ان کا استعمال ڈیٹا کی تفہیم پر مبنی ہونا چاہئے۔

صحیح اوسط پیمائش کا انتخاب آپ کے ڈیٹا سیٹ پر منحصر ہے، اور حقیقی دنیا کے گندے منظرناموں میں، درمیانی یا تراشی ہوئی اوسط اکثر سچ بتاتی ہے۔

میرے ساتھ جڑیں

  1. درمیانی

  2. لنکڈ

اگر آپ گہرائی میں کھودنا چاہتے ہیں تو ملاحظہ کریں: اوسط بمقابلہ میڈین بمقابلہ موڈ: ڈیٹا تجزیہ میں مرکزی رجحان کو سمجھنا.

اوپر تک سکرول کریں۔