يمكن مقارنة المتوسط (Mean) لمجموعتين او عينتين $x$ و $y$ من البيانات المستقلة (independent) بإستخدام اختبار t-test والذي يعتمد على الفرض (assumption) بأن هذه البيانات تمثل مجتمع يتبع التوزيع الطبيعي (normal distribution). حيث يكتب إختبار الفرض الإحصائي (Hypothesis test) كما يلي:
\begin{align*}
H_{0}:\mu_{x}=\mu_{y} \\
H_{1}:\mu_{x}\neq \mu_{y}
\end{align*}
والذي يفضل كتابته كما يلي:
\begin{align*}
H_{0}:\mu_{x}-\mu_{y}=0 \\
H_{1}:\mu_{x}- \mu_{y}\neq0
\end{align*}
نفرض أن لدينا البيانات mydata، حيث سوف نقوم باختبار ما إذا كان هناك اختلاف هام في المتوسط بين حجم مبيعات المتجر A والمتجر B وذلك باتباع الخطوات التالية:
اولا:استيراد البيانات
In:
import pandas as pd
mydata = pd.read_csv('mydata.csv',sep=',')
shopA=mydata['shopA']
shopB=mydata['shopB']
ثانيا: استخدام box plot للتأكد من عدم وجود قيم متطرفة (outliers)
In:
import matplotlib.pyplot as plt
mydata.plot(kind='box')
plt.show()
ثالثاً: التأكد من أن البيانات تتبع التوزيع الطبيعي (normal distribution)، من خلال:
- استخدام Q-Q plot:
In:
from scipy import stats
plt.subplot(1, 2, 1)
stats.probplot(mydata['shopA'], plot= plt)
plt.title('shopA')
plt.subplot(1, 2, 2)
stats.probplot(mydata['shopB'], plot= plt)
plt.title('shopB')
plt.show()
- استخدام Shapiro-Wilk test، حيث أن:
فرض العدم $H_{0}$: البيانات تتبع التوزيع الطبيعي
والفرض البديل $H_{1}$: البيانات لا تتبع التوزيع الطبيعي
In: from scipy.stats import shapiro for r in (shopA,shopB): stat, p_value = shapiro(r) print(r.name,"stat:",round(stat, 4), "P-value:", round(p_value, 4)) Out: shopA stat: 0.9801 P-value: 0.431 shopB stat: 0.9928 P-value: 0.9788
لكل المجموعتين نلاحظ أن P-value اكبر من 0.05 وبالتالي يمكن القول أن البيانات تتبع التوزيع الطبيعي.
رابعاً: تحديد ما اذا كان التباين (variance) بين مجموعتي البيانات متساوي باستخدام Levene’s test، حيث أن:
فرض العدم $H_{0}$: التباين لمجموعتي البيانات متساوي.
والفرض البديل $H_{1}$: التباين لمجموعتي البيانات غير متساوي.
In: from scipy.stats import levene stat, p_value = levene(shopA,shopB) print("stat:",round(stat, 4), "P-value:", round(p_value, 4)) Out: stat: 0.3695 P-value: 0.5444
نلاحظ أن P-value اكبر من 0.05 وبالتالي يمكن القول أن مجموعتي البيانات لها نفس التباين.
خامساً: تحديد ما اذا كان هناك إرتباط (correlation) بين مجموعتي البيانات باستخدام scatter plot، كما يلي:
In:
import seaborn as sns
sns.scatterplot(shopA, shopB)
plt.show()
سادساً: تطبيق t-test، حيث أن:
فرض العدم $H_{0}$: متوسطي مجموعتي البيانات متساوية.
والفرض البديل $H_{1}$: متوسطي مجموعتي البيانات غير متساوية.
ونظراً لتحقق الفروض اعلاه سوف نستخدم t-test للعينات المستقلة ذات التباين المتساوي:
In: from scipy.stats import ttest_ind stat, p_value = ttest_ind(shopA, shopB) print("stat:",round(stat, 4), "P-value:", round(p_value, 4)) Out: stat: 1.1574 P-value: 0.2494
نلاحظ أن P-value اكبر من 0.05 وبالتالي يمكن القول أنه ليس هناك اختلاف بين متوسطي المجموعتين.
ملاحظات هامة:
- إذا لم يتحقق فرض تساوي التباين للمجوعتين نستخدم Welch’s t-test:
stat, p_value = ttest_ind(shopA, shopB,equal_var=False) print("stat:",round(stat, 4), "P-value:", round(p_value, 4))
- إذا لم يتحقق فرض استقلال للمجوعتين نستخدم:
from scipy.stats import ttest_rel stat, p_value = ttest_rel(shopA, shopB) print("stat:",round(stat, 4), "P-value:", round(p_value, 4))