كيفية التحقق من صحة أداء النموذج في r


في الإحصائيات، غالبًا ما نبني النماذج لسببين:

  • فهم العلاقة بين واحد أو أكثر من متغيرات التوقع ومتغير الاستجابة.
  • استخدم نموذجًا للتنبؤ بالملاحظات المستقبلية.

يعد التحقق المتبادل مفيدًا لتقدير مدى قدرة النموذج على التنبؤ بالملاحظات المستقبلية.

على سبيل المثال، يمكننا بناء نموذج انحدار خطي متعدد يستخدم العمر والدخل كمتغيرات متوقعة والحالة الافتراضية كمتغير الاستجابة. في هذه الحالة، قد نرغب في ملاءمة النموذج لمجموعة بيانات ثم استخدام هذا النموذج للتنبؤ، بناءً على دخل مقدم الطلب الجديد وعمره، باحتمالية تخلفه عن سداد قرضه.

لتحديد ما إذا كان النموذج يتمتع بقدرة تنبؤية قوية، نحتاج إلى استخدامه للتنبؤ ببيانات لم يسبق له رؤيتها من قبل. سيسمح لنا ذلك بتقدير خطأ التنبؤ للنموذج.

استخدام التحقق المتبادل لتقدير خطأ التنبؤ

يشير التحقق المتبادل إلى طرق مختلفة يمكننا من خلالها تقدير خطأ التنبؤ. النهج العام للتحقق من الصحة هو:

1. ضع جانبًا عددًا معينًا من الملاحظات في مجموعة البيانات – عادةً 15-25% من جميع الملاحظات.
2. قم بضبط (أو “تدريب”) النموذج على الملاحظات التي نحتفظ بها في مجموعة البيانات.
3. اختبر مدى قدرة النموذج على تقديم تنبؤات حول الملاحظات التي لم نستخدمها لتدريب النموذج.

قياس جودة النموذج

عندما نستخدم النموذج المجهز لإجراء تنبؤات حول الملاحظات الجديدة، يمكننا استخدام عدة مقاييس مختلفة لقياس جودة النموذج، بما في ذلك:

مربع R المتعدد: يقيس قوة العلاقة الخطية بين متغيرات التوقع ومتغير الاستجابة. يشير مضاعف R-squared للـ 1 إلى علاقة خطية مثالية بينما يشير مضاعف R-squared للـ 0 إلى عدم وجود علاقة خطية. كلما ارتفع مضاعف R-squared، زادت احتمالية قيام المتغيرات المتوقعة بالتنبؤ بمتغير الاستجابة.

جذر متوسط مربع الخطأ (RMSE): يقيس متوسط خطأ التنبؤ الذي يحدثه النموذج عند التنبؤ بقيمة ملاحظة جديدة. هذا هو متوسط المسافة بين القيمة الحقيقية للملاحظة والقيمة التي تنبأ بها النموذج. تشير القيم المنخفضة لـ RMSE إلى ملاءمة أفضل للنموذج.

متوسط الخطأ المطلق (MAE): هذا هو متوسط الفرق المطلق بين القيمة الحقيقية للملاحظة والقيمة التي تنبأ بها النموذج. هذا المقياس بشكل عام أقل حساسية للقيم المتطرفة من RMSE. تشير القيم المنخفضة لـ MAE إلى ملاءمة أفضل للنموذج.

تنفيذ أربع تقنيات مختلفة للتحقق من الصحة في R

سنشرح بعد ذلك كيفية تنفيذ تقنيات التحقق المتبادل التالية في R:

1. نهج مجموعة التحقق من الصحة
2. التحقق من صحة k-fold
3. اترك التحقق المتبادل جانبًا
4. تكرار التحقق من صحة k-fold

لتوضيح كيفية استخدام هذه التقنيات المختلفة، سوف نستخدم مجموعة فرعية من مجموعة بيانات R المضمنة في mtcars :

 #define dataset
data <- mtcars[, c("mpg", "disp", "hp", "drat")]

#view first six rows of new data
head(data)

# mpg disp hp drat
#Mazda RX4 21.0 160 110 3.90
#Mazda RX4 Wag 21.0 160 110 3.90
#Datsun 710 22.8 108 93 3.85
#Hornet 4 Drive 21.4 258 110 3.08
#Hornet Sportabout 18.7 360 175 3.15
#Valiant 18.1 225 105 2.76

سنقوم ببناء نموذج انحدار خطي متعدد باستخدام disp و hp و drat كمتغيرات تنبؤية و mpg كمتغير الاستجابة.

نهج مجموعة التحقق من الصحة

يعمل نهج مجموعة التحقق من الصحة على النحو التالي:

1. قم بتقسيم البيانات إلى مجموعتين: مجموعة واحدة تستخدم لتدريب النموذج (أي تقدير معلمات النموذج) وتستخدم المجموعة الأخرى لاختبار النموذج. بشكل عام، يتم إنشاء مجموعة التدريب عن طريق اختيار 70-80% من البيانات بشكل عشوائي، ويتم استخدام 20-30% المتبقية من البيانات كمجموعة اختبار.

2. قم بإنشاء النموذج باستخدام مجموعة بيانات التدريب.
3. استخدم النموذج لعمل تنبؤات حول بيانات مجموعة الاختبار.
4. قم بقياس جودة النموذج باستخدام مقاييس مثل R-squared وRMSE وMAE.

مثال:

يستخدم المثال التالي مجموعة البيانات التي حددناها أعلاه. أولا نقوم بتقسيم البيانات إلى
مجموعة تدريب ومجموعة اختبار، باستخدام 80% من البيانات كمجموعة تدريب و20% المتبقية من البيانات كمجموعة اختبار. بعد ذلك، نقوم ببناء النموذج باستخدام مجموعة التدريب. ثم نستخدم النموذج لعمل تنبؤات حول مجموعة الاختبار. وأخيرًا، قمنا بقياس جودة النموذج باستخدام R-squared وRMSE وMAE.

 #load dplyr library used for data manipulation
library(dplyr)

#load caret library used for partitioning data into training and test set
library(caret)

#make this example reproducible
set.seed(0)

#define the dataset
data <- mtcars[, c("mpg", "disp", "hp", "drat")]

#split the dataset into a training set (80%) and test set (20%).
training_obs <- data$mpg %>% createDataPartition(p = 0.8, list = FALSE)

train <- data[training_obs, ]
test <- data[-training_obs, ]

# Build the linear regression model on the training set
model <- lm(mpg ~ ., data = train)

# Use the model to make predictions on the test set
predictions <- model %>% predict(test)

#Examine R-squared, RMSE, and MAE of predictions
data.frame(R_squared = R2(predictions, test$mpg),
           RMSE = RMSE(predictions, test$mpg),
           MAE = MAE(predictions, test$mpg))

#R_squared RMSE MAE
#1 0.9213066 1.876038 1.66614

عند مقارنة النماذج المختلفة، فإن النموذج الذي ينتج أقل RMSE في مجموعة الاختبار هو النموذج المفضل.

مزايا وعيوب هذا النهج

ميزة أسلوب مجموعة التحقق من الصحة هو أنه بسيط وفعال من الناحية الحسابية. العيب هو أن النموذج تم إنشاؤه باستخدام جزء فقط من البيانات الإجمالية. إذا كانت البيانات التي تركناها خارج مجموعة التدريب تحتوي على معلومات مثيرة للاهتمام أو قيمة، فلن يأخذها النموذج في الاعتبار.

نهج التحقق من الصحة عبر k-fold

يعمل نهج التحقق من الصحة عبر k-fold على النحو التالي:

1. قم بتقسيم البيانات بشكل عشوائي إلى “طيات” أو مجموعات فرعية (على سبيل المثال، 5 أو 10 مجموعات فرعية).
2. قم بتدريب النموذج على كافة البيانات، مع ترك مجموعة فرعية واحدة فقط.
3. استخدم النموذج لعمل تنبؤات حول البيانات من المجموعة الفرعية التي تم استبعادها.
4. كرر هذه العملية حتى يتم استخدام كل مجموعة فرعية من k كمجموعة اختبار.
5 . قياس جودة النموذج عن طريق حساب متوسط أخطاء الاختبار k. هذا معروف
كخطأ في التحقق من الصحة.

مثال

في هذا المثال، نقوم أولاً بتقسيم البيانات إلى 5 مجموعات فرعية. ثم نلائم النموذج باستخدام جميع البيانات باستثناء مجموعة فرعية. ثم نستخدم النموذج لإجراء تنبؤات حول المجموعة الفرعية التي تم استبعادها وتسجيل خطأ الاختبار (باستخدام R-squared وRMSE وMAE). نكرر هذه العملية حتى يتم استخدام كل مجموعة فرعية كمجموعة اختبار. ثم نقوم ببساطة بحساب متوسط أخطاء الاختبار الخمسة.

 #load dplyr library used for data manipulation
library(dplyr)

#load caret library used for partitioning data into training and test set
library(caret)

#make this example reproducible
set.seed(0)

#define the dataset
data <- mtcars[, c("mpg", "disp", "hp", "drat")]

#define the number of subsets (or "folds") to use
train_control <- trainControl(method = "cv", number = 5)

#train the model
model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control)

#Summarize the results
print(model)

#Linear Regression 
#
#32 samples
#3 predictor
#
#No pre-processing
#Resampling: Cross-Validated (5 fold) 
#Summary of sample sizes: 26, 25, 26, 25, 26 
#Resampling results:
#
# RMSE Rsquared MAE     
#3.095501 0.7661981 2.467427
#
#Tuning parameter 'intercept' was held constant at a value of TRUE

مزايا وعيوب هذا النهج

تتمثل ميزة أسلوب التحقق المتقاطع k-fold على نهج مجموعة التحقق من الصحة في أنه يبني النموذج عدة مرات مختلفة باستخدام أجزاء مختلفة من البيانات في كل مرة، لذلك لا نضطر إلى حذف البيانات المهمة عند بناء النموذج.

الجزء الشخصي من هذا النهج هو اختيار القيمة التي سيتم استخدامها لـ k، أي عدد المجموعات الفرعية التي سيتم تقسيم البيانات إليها. بشكل عام، تؤدي قيم k المنخفضة إلى انحياز أعلى ولكن إلى تباين أقل، بينما تؤدي قيم k الأعلى إلى انحياز أقل ولكن إلى تباين أعلى.

من الناحية العملية، يتم اختيار k بشكل عام ليكون مساويًا لـ 5 أو 10، لأن هذا العدد من المجموعات الفرعية يميل في نفس الوقت إلى تجنب الكثير من التحيز والكثير من التباين.

ترك نهج التحقق المتبادل (LOOCV) واحدًا

يعمل نهج LOOCV على النحو التالي:

1. أنشئ النموذج باستخدام جميع الملاحظات الموجودة في مجموعة البيانات باستثناء واحدة.
2. استخدم النموذج للتنبؤ بقيمة الملاحظة المفقودة. سجل خطأ اختبار هذا التوقع.
3. كرر هذه العملية لكل ملاحظة في مجموعة البيانات.
4. قياس جودة النموذج من خلال حساب متوسط جميع أخطاء التنبؤ.

مثال

يوضح المثال التالي كيفية استخدام إجراء LOOCV لنفس مجموعة البيانات المستخدمة في الأمثلة السابقة:

 #load dplyr library used for data manipulation
library(dplyr)

#load caret library used for partitioning data into training and test set
library(caret)

#make this example reproducible
set.seed(0)

#define the dataset
data <- mtcars[, c("mpg", "disp", "hp", "drat")]

#specify that we want to use LOOCV
train_control <- trainControl( method = "LOOCV" )

#train the model
model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control)

#summarize the results
print(model)

#Linear Regression 
#
#32 samples
#3 predictor
#
#No pre-processing
#Resampling: Leave-One-Out Cross-Validation 
#Summary of sample sizes: 31, 31, 31, 31, 31, 31, ... 
#Resampling results:
#
# RMSE Rsquared MAE     
#3.168763 0.7170704 2.503544
#
#Tuning parameter 'intercept' was held constant at a value of TRUE

مزايا وعيوب هذا النهج

تتمثل ميزة LOOCV في أننا نستخدم جميع نقاط البيانات، مما يقلل بشكل عام من التحيز المحتمل. ومع ذلك، بما أننا نستخدم النموذج للتنبؤ بقيمة كل ملاحظة، فقد يؤدي ذلك إلى تباين أكبر في خطأ التنبؤ.

عيب آخر لهذا النهج هو أنه يجب أن يتناسب مع عدد كبير من النماذج بحيث يمكن أن يصبح غير فعال وثقيل حسابيًا.

تكرار نهج التحقق من الصحة عبر k-fold

يمكننا إجراء التحقق المتبادل المتكرر على شكل k-fold ببساطة عن طريق إجراء التحقق المتبادل على شكل k-fold عدة مرات. الخطأ الأخير هو متوسط الخطأ في عدد التكرارات.

ينفذ المثال التالي تحققًا متقاطعًا مكونًا من 5 أضعاف، ويتكرر 4 مرات:

 #load dplyr library used for data manipulation
library(dplyr)

#load caret library used for partitioning data into training and test set
library(caret)

#make this example reproducible
set.seed(0)

#define the dataset
data <- mtcars[, c("mpg", "disp", "hp", "drat")]

#define the number of subsets to use and number of times to repeat k-fold CV
train_control <- trainControl(method = "repeatedcv", number = 5, repeats = 4 )

#train the model
model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control)

#summarize the results
print(model)

#Linear Regression 
#
#32 samples
#3 predictor
#
#No pre-processing
#Resampling: Cross-Validated (5 fold, repeated 4 times) 
#Summary of sample sizes: 26, 25, 26, 25, 26, 25, ... 
#Resampling results:
#
# RMSE Rsquared MAE     
#3.176339 0.7909337 2.559131
#
#Tuning parameter 'intercept' was held constant at a value of TRUE

مزايا وعيوب هذا النهج

وتتمثل ميزة أسلوب التحقق المتبادل المتكرر على شكل k في أنه سيتم تقسيم البيانات لكل تكرار إلى مجموعات فرعية مختلفة قليلاً، والتي ينبغي أن تعطي تقديرًا أكثر غير متحيز لخطأ التنبؤ الخاص بالنموذج. عيب هذا النهج هو أنه يمكن أن يكون مكثفًا من الناحية الحسابية حيث يتعين علينا تكرار عملية تركيب النموذج عدة مرات.

كيفية اختيار عدد الطيات في التحقق المتقاطع

الجزء الأكثر ذاتية من التحقق المتبادل هو تحديد عدد الطيات (أي المجموعات الفرعية) التي سيتم استخدامها. بشكل عام، كلما كان عدد الطيات أقل، كلما كانت تقديرات الخطأ أكثر انحيازًا، ولكنها أقل تغيرًا. وعلى العكس من ذلك، كلما زاد عدد الطيات، قل انحياز تقديرات الخطأ، ولكن زاد تنوعها.

من المهم أيضًا مراعاة وقت الحساب. ستحتاج إلى تدريب نمط جديد لكل طية، وعلى الرغم من أن هذه عملية بطيئة، إلا أنها قد تستغرق وقتًا طويلاً إذا اخترت عددًا كبيرًا من الطيات.

من الناحية العملية، عادةً ما يتم إجراء التحقق المتبادل من خلال 5 أو 10 طيات، حيث يوفر ذلك توازنًا جيدًا بين التباين والتحيز، مع كونه فعالًا من الناحية الحسابية أيضًا.

كيفية اختيار نموذج بعد إجراء التحقق المتبادل

يتم استخدام التحقق المتبادل لتقييم خطأ التنبؤ للنموذج. يمكن أن يساعدنا هذا في الاختيار بين نموذجين مختلفين أو أكثر من خلال تسليط الضوء على النموذج الذي يحتوي على أقل خطأ في التنبؤ (استنادًا إلى RMSE أو R-squared وما إلى ذلك).

بمجرد أن نستخدم التحقق المتبادل لاختيار أفضل نموذج، نستخدم بعد ذلك جميع البيانات المتاحة لتناسب النموذج المختار. نحن لا نستخدم نماذج النموذج الفعلية التي قمنا بتدريبها أثناء التحقق من الصحة لنموذجنا النهائي.

على سبيل المثال، يمكننا استخدام التحقق المتقاطع بخمسة أضعاف لتحديد النموذج الأفضل للاستخدام بين نموذجي انحدار مختلفين. ومع ذلك، بمجرد تحديد النموذج الأفضل للاستخدام، نستخدم جميع البيانات لتناسب النموذج النهائي. بمعنى آخر، لا ننسى أيًا من الطيات عند بناء النموذج النهائي.

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *