# מערך שיעור: פרויקט מסכם — Naive Bayes📋 מערך מרצה

הקשר: פרויקט אינטגרציה שמשלב את שלוש היחידות האחרונות (OOP, SOLID, Exceptions/IO/JSON/LINQ) — לא נלמד כאן שום כלי חדש (מלבד `SelectMany`), רק שילוב של כלים קיימים לפתרון אחד שלם.

מטרת הפרויקט: הסטודנטים יבנו קוד עובד שקורא CSV, סופר תדירויות מילים עם LINQ, ומסווג הודעה חדשה במחלקה מובנית לפי SRP — בלי הדרכה שלב-אחר-שלב.

---

## דגשים להנחיה

- זהו הפרויקט הראשון בקורס עם עבודה עצמאית ממושכת — תנו לרוב הזמן להיות עבודה עצמאית/בזוגות, לא הרצאה. הכינו את עצמכם לסבב בין הסטודנטים ולעזור נקודתית.
- אם סטודנטים נתקעים, הפנו אותם קודם חזרה לשיעור ה-LINQ (`GroupBy`/`SelectMany`) או ה-OOP (SRP) הרלוונטי — רוב הקשיים כאן הם ביישום כלים קיימים, לא במושג חדש.
- `SelectMany` הוא הכלי היחיד שלא נלמד במפורש קודם — אם סטודנטים לא מכירים אותו, זה בסדר להסביר אותו נקודתית: הוא "משטח" רשימה-של-רשימות לרשימה שטוחה אחת, שונה מ-`Select` הרגיל.

---

## איך להעריך הצלחה

בדקו שקריאת ה-CSV, ספירת התדירויות והסיווג עצמו נמצאים בשלושה מקומות נפרדים בקוד (לא מעורבבים במתודה אחת) — זה הסימן שה-SRP באמת יושם, לא רק "עבד במקרה". הריצו את המסווג על הודעה עם מילים מוכרות מ-spam ועל הודעה נייטרלית, וודאו שהתוצאות הגיוניות. אם התוצאה זהה לכל הודעה (הכל מסווג לאותה קטגוריה), כנראה שיש בעיה בטיפול במילים לא-מוכרות (ציון שמתאפס בכפל).

---

## טעויות נפוצות של סטודנטים

- לשכוח לדלג על שורת הכותרת ב-CSV ולכלול אותה בטעות כנתון אימון.
- להשתמש בברירת מחדל `0` לתדירות של מילה לא-מוכרת, מה שמאפס את הציון כולו בכפל — כדאי לכתוב את המלכודת הזו על הלוח מראש ולהסביר את הסיבה, לפני שסטודנטים מגיעים אליה בעצמם ומקבלים תוצאות מוזרות.
- לערבב את לוגיקת הקריאה מהקובץ עם לוגיקת הסיווג באותה מתודה — הפרת ה-SRP שהפרויקט אמור להדגים.

---

## תרגיל חשיבה

**שאלת פתיחה:** "המסווג שלכם למד רק מ-20 הודעות. אם תבדקו אותו על הודעה עם מילים שהוא מעולם לא ראה — מה יקרה, ולמה זה בעייתי?"

**מהלך:** הובילו לתובנה שמילה לא-מוכרת צריכה לקבל ציון "נייטרלי" ולא לאפס את כל החישוב. אבל גם זה לא פתרון מושלם — עם נתוני אימון קטנים, המסווג "לא יודע הרבה" ועלול לטעות. זו הזדמנות טובה לדבר על החשיבות של **כמות** נתוני אימון באלגוריתמי למידה בכלל, נושא שיחזור בהרחבה רבה יותר ביחידות ה-Data מאוחר יותר בקורס.

**מה המרצה מראה בסוף:** הריצו מסווג עובד על הודעה עם הרבה מילים לא-מוכרות, והראו שהציון קרוב מדי בין spam ל-ham (כי כל המילים הלא-מוכרות "לא תורמות מידע"). זו דוגמה חיה למגבלת "כמה שיותר נתוני אימון = מסווג טוב יותר" — נושא שיעמיק בהמשך הקורס.
