Menu
CoddyTech

פלחי לקוחות

חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 39 מתוך 51.

בפרק הזה נשתמש באשכולות, עד ליצירת רשימת השמעה שממופה לפי מצב הרוח:

80 שירים כנקודות, ערכיות לרוחב ואנרגיה לגובה, בארבע קבוצות ש-k-means מצא ושמותיהן: מתוח בפינה השמאלית העליונה, שמח בפינה הימנית העליונה, עצוב בפינה השמאלית התחתונה, רגוע בפינה הימנית התחתונה

ראשית, פלחים: קבוצות שאפשר לפעול לפיהן. אכסניה הגדילה את קנה המידה של שני מאפיינים וחילקה את האורחים שלה לקבוצות:

150 אורחים באכסניה, מספר הלילות בכל שהייה לרוחב ומספר הימים מראש שבהם הוזמנה השהייה כלפי מעלה, בשלושה פלחים: טיולי בתי ספר שהוזמנו חודשים מראש, נופשי סוף שבוע עם שהיות קצרות, תרמילאים עם שהיות ארוכות שהוזמנו ברגע האחרון

היחידות המקוריות מתארות איך נראה מקטע. המרכז המותאם לקנה מידה מראה מה מייחד אותו: כל מאפיין ב-std ביחס לממוצע של האורחים.

X = StandardScaler().fit_transform(guests[["nights", "days_ahead"]])
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(X)
print(km.cluster_centers_.round(1))

זה מדפיס:

[[ 1.3 -0.7]
 [-0.7 -0.7]
 [-0.7  1.4]]

המספר בכל שורה שהכי רחוק מ-0 מציין את המקטע שלה. שורה 0 נשארת 1.3 סטיות תקן ארוכה יותר: תרמילאים. שורה 2 מזמינה 1.4 סטיות תקן מוקדם יותר: טיולי בתי ספר.

challenge icon

אתגר

בינוני

תיאטרון רוצה להכיר את 166 חבריו. התוכנית קוראת את המאפיינים לפילוח, כגון age,ticket_price.

  1. בצעו קנה מידה לעמודות האלה, חלקו לאשכולות ל־best_k(X) פלחים בעזרת פונקציית העזר שסופקה, והדפיסו כמה יש.
  2. מהגדול לקטן, הדפיסו את גודל כל פלח ואת שמו: המאפיין של המרכז שלו שהכי רחוק מ־0, high או low, ובאיזו מידה.

עבור תיאטרון אחר ועבור age,shows_per_year:

4 segments
57 members: high shows_per_year (1.2 std from average)
52 members: low shows_per_year (1.0 std from average)
40 members: low age (1.4 std from average)
32 members: high age (1.5 std from average)

נסו בעצמכם

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

# שורה אחת לכל חבר בתיאטרון
members = pd.read_csv("theatre.csv")
# המאפיינים שלפיהם מבצעים חלוקה לקבוצות, כגון age,ticket_price
features = input().split(",")


# על פי ציוני הסילואט: הערך של k בין 2 ל־6 שמניב את ציון הסילואט הטוב ביותר עבור X
def best_k(X):
    best, best_score = 2, -1
    for k in range(2, 7):
        labels = KMeans(n_clusters=k, n_init=10, random_state=0).fit_predict(X)
        score = silhouette_score(X, labels)
        if score > best_score:
            best, best_score = k, score
    return best


# כתבו את הקוד שלכם למטה
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה למידה בלתי מונחית

תרגלו בעצמכם: קומפיילר Python אונליין