الرئيسية قاعدة المعرفة أسس الذكاء الاصطناعي الانحدار الخطي: توقّع سلوك الآلة من بياناتها التاريخية
أسس الذكاء الاصطناعي

الانحدار الخطي: توقّع سلوك الآلة من بياناتها التاريخية

ما هو الانحدار ولماذا يهم المهندس؟

الانحدار هو أسلوب للتنبؤ بقيمة رقمية مستمرة بناءً على متغيرات أخرى. في الصناعة، نستخدمه يومياً:

  • توقع استهلاك الطاقة بناءً على حجم الإنتاج
  • تقدير عمر القطعة بناءً على ظروف التشغيل
  • التنبؤ بدرجة حرارة المحرك من السرعة والحمل

الفرق بين الانحدار والتصنيف

  • الانحدار: التنبؤ بقيمة رقمية (درجة حرارة، استهلاك طاقة، وقت)
  • التصنيف: التنبؤ بفئة (سليم/معيب، نوع العطل)

الانحدار الخطي البسيط: خط واحد يلخص البيانات

أبسط أشكال الانحدار: علاقة بين متغير واحد (x) ونتيجة (y):

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# بيانات: سرعة دوران المحرك (RPM) واستهلاك الكهرباء (kWh)
np.random.seed(42)
rpm = np.random.uniform(500, 2000, 50)
energy = 2.5 + 0.008 * rpm + np.random.normal(0, 0.5, 50)

# تدريب النموذج
X = rpm.reshape(-1, 1)
model = LinearRegression()
model.fit(X, energy)

print(f"المعادلة: الطاقة = {model.intercept_:.2f} + {model.coef_[0]:.4f} × RPM")
print(f"لكل زيادة 100 RPM، يزيد الاستهلاك {model.coef_[0] * 100:.2f} kWh")

# رسم الخط الأمثل
plt.figure(figsize=(8, 5))
plt.scatter(rpm, energy, alpha=0.6, label='بيانات فعلية')
rpm_range = np.linspace(400, 2100, 100).reshape(-1, 1)
plt.plot(rpm_range, model.predict(rpm_range), 'r-', linewidth=2, label='خط الانحدار')
plt.xlabel('سرعة الدوران (RPM)')
plt.ylabel('استهلاك الطاقة (kWh)')
plt.title('العلاقة بين سرعة المحرك واستهلاك الطاقة')
plt.legend()
plt.tight_layout()
plt.savefig('linear_regression.png', dpi=150)
plt.show()

الانحدار المتعدد: عدة عوامل تؤثر معاً

في الواقع الصناعي، النتيجة تعتمد على عدة متغيرات:

import pandas as pd
from sklearn.linear_model import LinearRegression

# بيانات مصنع: عوامل تؤثر على استهلاك الطاقة
np.random.seed(42)
n = 200
data = pd.DataFrame({
    'motor_speed': np.random.uniform(500, 2000, n),
    'ambient_temp': np.random.uniform(15, 40, n),
    'load_kg': np.random.uniform(100, 500, n),
    'runtime_hours': np.random.uniform(1, 8, n)
})

# المتغير المستهدف: استهلاك الطاقة
data['energy_kwh'] = (
    1.5 +
    0.008 * data['motor_speed'] +
    0.05 * data['ambient_temp'] +
    0.003 * data['load_kg'] +
    0.8 * data['runtime_hours'] +
    np.random.normal(0, 0.3, n)
)

# تدريب النموذج
X = data[['motor_speed', 'ambient_temp', 'load_kg', 'runtime_hours']]
y = data['energy_kwh']

model_multi = LinearRegression()
model_multi.fit(X, y)

# أهمية كل عامل
print("تأثير كل عامل على استهلاك الطاقة:")
for name, coef in zip(X.columns, model_multi.coef_):
    print(f"  {name}: {coef:.4f}")
print(f"  الثابت: {model_multi.intercept_:.4f}")

التدريب والاختبار: تقسيم البيانات

القاعدة الذهبية: لا تختبر النموذج على نفس البيانات التي تدرب عليها:

from sklearn.model_selection import train_test_split

# تقسيم البيانات: 80% للتدريب، 20% للاختبار
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

print(f"بيانات التدريب: {len(X_train)} سجل")
print(f"بيانات الاختبار: {len(X_test)} سجل")

# تدريب على بيانات التدريب فقط
model = LinearRegression()
model.fit(X_train, y_train)

# التنبؤ على بيانات الاختبار
y_pred = model.predict(X_test)

# مقارنة التنبؤات بالقيم الفعلية
comparison = pd.DataFrame({
    'فعلي': y_test.values[:10],
    'متوقع': y_pred[:10],
    'الفرق': (y_test.values[:10] - y_pred[:10]).round(3)
})
print("\nمقارنة أول 10 تنبؤات:")
print(comparison.round(3))

تقييم النموذج: R² و MSE

كيف نعرف أن النموذج جيد بما فيه الكفاية؟

from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error

# حساب مقاييس الأداء
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("مقاييس أداء النموذج:")
print(f"  R² (معامل التحديد): {r2:.4f}")
print(f"  MSE (متوسط مربع الخطأ): {mse:.4f}")
print(f"  RMSE (جذر MSE): {rmse:.4f}")
print(f"  MAE (متوسط الخطأ المطلق): {mae:.4f}")

تفسير المقاييس

  • R² = 0.95 يعني أن النموذج يفسر 95% من التباين في البيانات
  • RMSE = 0.5 kWh يعني أن متوسط خطأ التنبؤ حوالي 0.5 كيلوواط/ساعة
  • MAE أسهل في التفسير: متوسط الانحراف المطلق عن القيمة الحقيقية

مثال عملي: توقع استهلاك الطاقة من بيانات الإنتاج

سنبني نموذجاً متكاملاً لتوقع استهلاك الطاقة اليومي لمصنع:

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, mean_absolute_error
import matplotlib.pyplot as plt

# محاكاة بيانات 365 يوم إنتاج
np.random.seed(42)
n_days = 365
factory_data = pd.DataFrame({
    'units_produced': np.random.randint(500, 2000, n_days),
    'avg_temp_outside': 20 + 10 * np.sin(np.linspace(0, 2*np.pi, n_days)),
    'machines_active': np.random.randint(3, 10, n_days),
    'shift_hours': np.random.choice([8, 12, 16], n_days)
})

factory_data['energy_kwh'] = (
    50 +
    0.15 * factory_data['units_produced'] +
    1.2 * factory_data['avg_temp_outside'] +
    25 * factory_data['machines_active'] +
    8 * factory_data['shift_hours'] +
    np.random.normal(0, 10, n_days)
)

# بناء النموذج
features = ['units_produced', 'avg_temp_outside', 'machines_active', 'shift_hours']
X = factory_data[features]
y = factory_data['energy_kwh']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

r2 = r2_score(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
print(f"دقة النموذج R²: {r2:.4f}")
print(f"متوسط الخطأ المطلق: {mae:.1f} kWh")

# رسم التنبؤات مقابل القيم الفعلية
plt.figure(figsize=(8, 6))
plt.scatter(y_test, y_pred, alpha=0.5)
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'r--', linewidth=2)
plt.xlabel('الاستهلاك الفعلي (kWh)')
plt.ylabel('الاستهلاك المتوقع (kWh)')
plt.title(f'دقة توقع استهلاك الطاقة (R²={r2:.3f})')
plt.tight_layout()
plt.savefig('energy_prediction.png', dpi=150)
plt.show()

الخلاصة

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

regression linear-regression scikit-learn prediction training features الانحدار الانحدار الخطي التوقع التدريب الميزات النموذج