الدرس 5 من 9
شجرة القرار والغابة
موديل بيفكر بأسئلة زي ما انت بتفكر.
شجرة القرار
زي لعبة «٢٠ سؤال»: الموديل بيسأل أسئلة بإجابة آه أو لأ، كل سؤال بيقسم العملاء لمجموعتين أنضف، لحد ما يوصل لقرار. والجميل إنك تقدر تقرا تفكيره بالظبط.
import pandas as pd from sklearn.tree import DecisionTreeClassifier, export_text df = pd.read_csv("churn.csv") df["yearly"] = (df["contract"] == "yearly").astype(int) features = ["tenure", "bill", "complaints", "data_gb", "yearly"] tree = DecisionTreeClassifier(max_depth=3, random_state=42) tree.fit(df[features], df["churned"]) print(export_text(tree, feature_names=features))
اقرا الشجرة من فوق لتحت: أول سؤال سأله الموديل هو أهم حاجة في رأيه. وكل فرع بينتهي بـ class 1 (هيمشي) أو class 0 (هيفضل).
⚠ الشجرة الواحدة بتحفظلو سبت الشجرة تكبر من غير حد (
max_depth)، هتفضل تسأل لحد ما تحفظ كل عميل في الـ train لوحده، وتفشل مع أي عميل جديد. ده اسمه overfitting وليه درس لوحده.الـ Random Forest: حكمة الجماعة
بدل شجرة واحدة، اعمل مئات الشجر، كل واحدة بتتعلم من عينة عشوائية من الداتا ومن جزء عشوائي من الأعمدة، وخليهم يصوّتوا. زي إنك تسأل ١٠٠ دكتور بدل دكتور واحد: غلطات كل واحد بتلغي بعضها.
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import f1_score df = pd.read_csv("churn.csv") df["yearly"] = (df["contract"] == "yearly").astype(int) features = ["tenure", "bill", "complaints", "data_gb", "yearly"] X_train, X_test, y_train, y_test = train_test_split( df[features], df["churned"], test_size=0.2, random_state=42, stratify=df["churned"]) forest = RandomForestClassifier(n_estimators=300, min_samples_leaf=5, random_state=42, n_jobs=-1) forest.fit(X_train, y_train) print("F1 (churned):", round(f1_score(y_test, forest.predict(X_test)), 3)) # Which features mattered most? importance = pd.Series(forest.feature_importances_, index=features) print(importance.sort_values(ascending=False).round(3))
💼 الـ Feature Importance بتفرق في البيزنسمدير الشركة مش هيفرق معاه الموديل بيشتغل إزاي، بس هيفرق معاه جداً يعرف إن مدة الاشتراك وقيمة الفاتورة أكتر حاجتين بيتنبأوا بإن العميل هيمشي. كده يقدر يركز عروضه على العملاء الجداد اللي فواتيرهم عالية.
💡 الشجر مش محتاجة scalingعلى عكس الـ linear و logistic regression، الشجر بتسأل «أكبر من كذا؟» فمش فارق معاها المقياس. عشان كده بتبقى نقطة بداية سهلة مع أي داتا جدولية.