מקטעי קניות
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 48 מתוך 51.
חנות מקוונת לצמחים מכירה את 240 הלקוחות שלה רק לפי הפעולות שלהם: מספר ההזמנות בשנה, גודל הסל, שיעור הרכישות במבצע ומספר הימים מאז ההזמנה האחרונה.
אף אחד לא תייג אותם. הבעלים רוצה כמה מקטעים שהיא תוכל לתאר במילים פשוטות, ומייל להחזרת הלקוח עבור זה שהתרחק.
תן לשתי שיטות להסכים על k: עץ טווחים מציע אותו, והצללית בודקת אותו מול השכנים שלו. לאחר מכן קרא כל מקטע ביחידות אמיתיות.
אתגר
קשההתוכנית קוראת היכן לחתוך את העץ; קוד הפתיחה מכין תרשים עם כותרת.
- בצע התאמה של קנה המידה למאפיינים וחתוך שם עץ Ward. הדפס כמה מקטעים הוא יוצר.
- הדפס את ציון הצללית של k-means (3 ספרות אחרי הנקודה העשרונית) עבור אותו k ועבור כל אחד מהערכים הסמוכים לו, ואז את k הטוב ביותר.
- התאם מחדש עם הערך הזה לתוך
plants["segment"]. מיין מהגדול לקטן, תן אות לכל מקטע והדפס את הממוצעים שלו ביחידות המקוריות; לאחר מכן את המקטע שההזמנה האחרונה בו הייתה לפני הזמן הרב ביותר. - צור תרשים פיזור של כל מקטע, כשהוא מסומן באות שלו; הוסף מקרא והצג.
עבור חנות אחרת, חתוך ב-8:
Tree cut at 8.0: 3 segments
Silhouette at k = 2: 0.573
Silhouette at k = 3: 0.675
Silhouette at k = 4: 0.630
Best k: 3
A (70): 8.6 orders a year, 29 EUR baskets, 15% on sale, last order 23 days ago
B (50): 3.1 orders a year, 22 EUR baskets, 60% on sale, last order 53 days ago
C (30): 1.8 orders a year, 89 EUR baskets, 10% on sale, last order 148 days ago
Win-back email: segment Cוהתרשים שלה:
לאחר מכן Coddy מתאר את שלך.
נסו בעצמכם
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from scipy.cluster.hierarchy import linkage, fcluster
# שורה אחת לכל לקוח של חנות הצמחים
plants = pd.read_csv("plants.csv")
features = ["orders_per_year", "avg_basket_eur", "sale_share_pct", "days_since_order"]
# הגובה שבו בעל החנות חותך את עץ האשכולות של החנות, כפי שנקרא מהדנדרוגרמה שלו (3 מקטעים או יותר)
cut = float(input())
fig, ax = plt.subplots()
ax.set_title("Plant Shop Segments")
ax.set_xlabel("Orders per year")
ax.set_ylabel("Average basket (EUR)")
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
תרגלו בעצמכם: קומפיילר Python אונליין