الدرس 2 من 9
أول موديل: Linear Regression
الخط المستقيم اللي بدأنا نفهمه في المرحلة ٣، بس المكتبة هي اللي بتتعلمه.
الفكرة
الموديل بيفترض إن السعر = (وزن × المساحة) + (وزن × عدد الأوض) + ... + رقم ثابت. وبيدور على أحسن أوزان تقلل الغلط، بالظبط زي الـ gradient descent اللي عملناه بإيدنا، بس لكل الأعمدة مرة واحدة.
price = w₁·area + w₂·rooms + ... + b
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_absolute_error, r2_score df = pd.read_csv("apartments.csv") features = ["area", "rooms", "floor", "age", "metro_km"] X_train, X_test, y_train, y_test = train_test_split( df[features], df["price_k"], test_size=0.2, random_state=42) model = LinearRegression() model.fit(X_train, y_train) # learn the weights preds = model.predict(X_test) # predict prices it never saw print(f"MAE: {mean_absolute_error(y_test, preds):.0f}K EGP") print(f"R2: {r2_score(y_test, preds):.3f}")
نقرا النتيجة إزاي؟
MAE متوسط الغلط بالأرقام المطلقة، بنفس وحدة السعر. يعني الموديل بيغلط في المتوسط بالمبلغ ده.R² بيقيس الموديل فاهم قد إيه من تغير الأسعار. 1 يعني كامل، و0 يعني زي ما تقول المتوسط وخلاص.الموديل اتعلم إيه؟
import pandas as pd from sklearn.linear_model import LinearRegression df = pd.read_csv("apartments.csv") features = ["area", "rooms", "floor", "age", "metro_km"] model = LinearRegression().fit(df[features], df["price_k"]) for name, w in zip(features, model.coef_): print(f"{name:9} {w:+8.1f}K per unit")
كل متر زيادة بيزود السعر حوالي ١٨ ألف، وكل سنة من عمر العمارة بتنقصه، وكل كيلو بُعد عن المترو بينقصه أكتر. أرقام منطقية جداً، والموديل وصلها لوحده من الداتا.
توقع لشقة جديدة
import pandas as pd from sklearn.linear_model import LinearRegression df = pd.read_csv("apartments.csv") features = ["area", "rooms", "floor", "age", "metro_km"] model = LinearRegression().fit(df[features], df["price_k"]) new_flat = pd.DataFrame([{"area": 130, "rooms": 3, "floor": 4, "age": 5, "metro_km": 1.2}]) print(f"Estimated price: {model.predict(new_flat)[0]:,.0f}K EGP")
⚠ نسينا المدينة!الشقة في القاهرة غير الإسكندرية، بس عمود
city نص، والموديل مبيفهمش غير أرقام. هنعالج ده في درس الـ Feature Engineering، وهتشوف الغلط هيقل قد إيه.