350 likes | 771 Views
מחסני נתונים ( Data Warehousing ) קורס מסדי נתונים מחסן נתונים מחסן נתונים הוא מסד נתונים ענק המאחסן מידע היסטורי דוגמא: שמירת המידע על כל הקניות של מוצרים בכל הסניפים של רשת סופרמרקטים דוגמא: שמירת המידע על כל שיחות הטלפון שנעשו בטלפונים של חברה מסוימת שאילתות OLTP ו- OLAP
E N D
מחסני נתונים (Data Warehousing) קורס מסדי נתונים
מחסן נתונים • מחסן נתונים הוא מסד נתונים ענק המאחסן מידע היסטורי • דוגמא: שמירת המידע על כל הקניות של מוצרים בכל הסניפים של רשת סופרמרקטים • דוגמא: שמירת המידע על כל שיחות הטלפון שנעשו בטלפונים של חברה מסוימת
שאילתות OLTP ו- OLAP • השאילתות עד כה הן Online Line Transaction Processing (OLTP), כלומר הרבה שאילתות קטנות שהתוצאה שלהן נדרשת באופן מיידי • סוג אחר של שאילתות הן שאילתות Online Line Analytical Processing (OLAP) שלרוב מופעלות על מחסני נתונים • בשאילתות שימוש רב בפונקציות הקבצה • אין צורך בתוצאות מיידיות • חישובי סטטיסטיקות על הנתונים כחלק מתמיכה בקבלת החלטות
יצירת מחסן נתונים • נדרש צירוף נתונים ממקורות שונים • נדרש שינוי בסכימה של הנתונים להתאמה לסכימה אחידה • נדרשת התאמה ביחידות של הנתונים המאוחדים • לעיתים נדרשת תמיכה בעדכון נתונים שהשתנו • לעיתים נדרשת תמיכה בניקוי נתונים שהתיישנו • נדרשת שמירת מידע על הנתונים (metadata repository) כדי לנהל את הנתונים
תכנון הטבלאות במחסן הנתונים • לרוב נעשה שימוש בסכימת כוכב: • טבלת נתונים (fact table) שגדלה באופן קבוע • טבלאות ממד (dimension tables) קטנות שלרוב נשארות קבועות • לדוגמא: • Sales(pid, timeid, locid, amount) • Products(pid, pname, category, price) • Locations(locid, city, start, country) • Times(timeid, date, week, month, holiday_flag) טבלת נתונים טבלאות ממד
צורות נורמליות • טבלת נתונים בצורת BCNF • טבלאות ממד: לא בהכרח בצורת BCNF • מיעוט פעולות הוספה, ביטול ועדכון ולכן מיעוט בעיות של אי עקביות ואי סדירות • יחסית מעט מידע ולכן כפילויות אינן מהוות בעיה • מאפשר חישוב יעיל של שאילתות משום שהפירוק אינו דורש ביצוע פעולות צירוף טבעי
כריית נתונים • כריית נתונים הוא תהליך של מציאת הקשרים מעניינים או תבניות במסדי נתונים גדולים לצורך תמיכה בקבלת החלטות עתידיות • כריית נתונים מאופיינת בניתוח מידע על סמך קבוצות נתונים גדולות מאוד
דוגמאות • מציאת קישורים בין מוצרים שנקנים בחנות: • דוגמת הבירה והחיתולים • החלטה על הנחה במוצר • קביעת רשימת הספרים המומלצים שיופיעו בסוף ספר מסוים • כיצד לסווג לקוחות לצורך משלוח יעיל של עלוני פרסומת
Data Mining vs. Machine Learning • כמות הנתונים: מסד הנתונים מאוד גדול אז על האלגוריתמים להיות מותאמים לכך • עיצוב: מסדי נתונים לרוב אינם מעוצבים למימוש כריית נתונים ולכן תכונותיהם לא מתאימות לכריית נתונים • שגיאות ורעש: כמעט תמיד מסדי נתונים מכילים שגיאות
חוקי קישור (Association Rules) • סל קניות הוא אוסף של פריטים שנקנו בידי לקוח יחיד בקניה יחידה • הבעיה: זיהוי קבוצות של פריטים שנקנו יחד • מנסים לזהות חוקים מהצורה {pen} {ink} המשמעות: אם עט נרכש בקניה אז סביר להניח שגם דיו נרכש בקניה
מדדים לחוקי קישור • צורה כללית של חוק קישור: LR כאשר L ו-R הן קבוצות של פריטים • תמיכה (Support): התמיכה בחוק LR היא אחוז עסקאות הקניה שמכילות את כל הפריטים מ-L ומ-R • וודאות (Cnfidence): הוודאות של חוק LR היא אחוז עסקאות הקניה שכוללות את R מבין העסקאות שכוללות את L
דוגמאות • לחוק{pen}{ink} יש: • תמיכה: • ודאות: • לחוק {tissues}{ink}יש • תמיכה: • ודאות: • לחוק {pen}{soap} יש • תמיכה: • ודאות:
אינטואיציה למדדים • אם לחוק תמיכה נמוכה יתכן שהוא נתגלה במקרה ואין מספיק עדויות כדי לבסס אותו • אם לחוק LR יש וודאות נמוכה סביר להניח שאין קשר בין רכישת L ורכישת R • הערה: החוקים RL ו-LR יש להם תמיכה זהה אבל עשויה להיות להם ודאות שונה
המטרה • מעונינים למצוא חוקי קישור בעלי תמיכה גבוהה וודאות גבוהה (בהתייחס למינימום תמיכה ומינימום ודאות הנתונים על ידי המשתמש)
אלגוריתם לחישוב • בהנתן ערכים s ו-c, יש למצוא את כל חוקי הקישור עם תמיכה גדולה או שווה ל-s ועם וודאות גדולה או שווה ל-c • ניתן לבצע את החישוב בשני שלבים: • שלב 1: מציאת קבוצות פריטים בעלות תדירות גבוהה (קבוצות פריטים בעלות תמיכה >= s) • שלב 2: לכל קבוצה בעלת תדירות גבוהה F, עוברים על כל החלוקות של F ל-R ול-L ובודקים אם לחוק LRיש וודאות >= c
מציאת קבוצות בעלות תדירות גבוהה • כיצד נעשה זאת? ?
מציאת קבוצות בעלות תדירות גבוהה • תכונה אפריורית (The A Priori Property): כל תת קבוצה של קבוצה בעלת תדירות גבוהה היא בעלת תדירות גבוהה • מהתכונה האפריורית מתקבל שניתן לייצר באופן איטרטיבי את הקבוצות בעלות התדירות הגבוהה: • לוקחים קבוצות פריטים בעלות תדירות גבוהה שגודלן n • מרחיבים את הקבוצות בגודל n לקבוצות בעלות תדירות גבוהה בגודל n+1
מציאת קבוצות בעלות תדירות גבוהה Freq = {} scan all transactions once and add to Freq the items that have support > s k = 1 repeat foreachIkin Freq with k items generate all itemsets Ik+1with k+1 items, such that Ikis contained in Ik+1 scan all transactions once and add to Freq the k+1-itemsets that have support > s k++ until no new frequent itemsets are found
דוגמא מריצים את האלגוריתם עם תמיכה = 0.7 • שלב 1: מציאת קבוצות עם תדירות גבוהה: {pen}, {ink}, {diary} • שלב 2: בודקים את הקבוצות הבאות: {pen, ink}, {pen, diary}, {pen, soap}, {pen, tissues}, {ink, diary}, {ink, soap}, {ink, tissues}, {diary, soap}, {diary, tissues} הקבוצות עם תדירות >= 0.7 הן: {pen, ink}, {pen, diary}
המשך דוגמא • שלב 3: בודקים כל אחת מהקבוצות: {pen, ink, diary}, {pen, ink, soap}, {pen, ink, tissues}, {pen, diary, soap}, {pen, diary, tissues} אין קבוצות עם תדירות >= 0.7 • מקבלים שקבוצות הפריטים עם התדירות הגבוהה הן: {pen}, {ink}, {diary} {pen, ink}, {pen, diary}
עידון של האלגוריתם • באלגוריתם, נבדק האם {pen, tissues} זו קבוצה בעלת תדירות גבוהה גם כאשר היה ידוע ש- {tissues} אינה קבוצה בעלת תדירות גבוהה • עידון: מרחיבים קבוצות פריטים בעלות תדירות גבוהה רק על ידי פריטים כך שכל תת הקבוצות אחרי ההרחבה יהיו קבוצות פריטים בעלות תדירות גבוהה • יתכן שטבלת הקניות לא נכנסת לזיכרון הראשי ואז הסריקה תהיה יקרה • הפתרון: דוגמים את טבלת הקניות ומשתמשים בדגימה בעלת גודל שתואם את הזיכרון הראשי במקום להשתמש בטבלת הקניות עצמה
גזירת חוקי קישור foreach frequent itemset I foreach partition of I to two sets L, R generate a candidate rule LR foreach transaction T in the database foreach candidate rule LR if L in T then lnum(LR)++ if R in T then rnum(LR)++ return all rules LR with rnum(LR)/lnum(LR) > c
הכללת חוקי קישור • רוצים לדעת האם בימי חמישי {milk}{bread} באופן שונה מיתר ימי השבוע, כיצד נעשה זאת? • רוצים לדעת האם לקוחות מתל אביב מתקיימים לגביהם אותם חוקי גרירה שמתקיימים ללקוחות מירושלים
סוגים אחרים של חוקים • תבניות סדרתיות (Sequential Patterns) • כל קניה עבור כל לקוח היא קבוצה של פריטים • סדרה של קניות היא סדרה של קבוצות פריטים • לדוגמא: {pen, ink, soap}, {pen, ink diary, soap} • תת סדרה נגזרת מסדרה על ידי • מחיקת מספר קבוצות במלואן מהסדרה • מחיקת פריטים מקבוצות אחרות בסדרה
תבניות סדרה • {pen}, {ink, diary}, {pen, soap} • היא תת סדרה של • {pen, ink}, {shirt}, {milk, ink, diary}, {soap, pen, diary} • {pen}, {ink, diary}, {pen, soap} • אינה תת סדרה של • {pen, ink}, {shirt}, {soap, pen, diary}, {milk, ink, diary}
תבניות סדרה • התמיכה בתבנית סדרה S היא אחוז סדרות הקניה של הלקוחות ש-S היא תת סדרה שלהן • סדרה s1, s2, ..., snבעלת תמיכה גבוהה מעידה שמי שקנה את s1 בסבירות גבוהה יקנה את s2 בהמשך וכן הלאה... • מציאת תבניות סדרה: • נעשה באופן דומה למציאת קבוצות פריטים בעלות תדירות גבוהה • מתחילים עם סדרות קטנות ומנסים להרחיב אותן
חוקי סיווג (Classification Rules) • נתונה טבלה: InsuranceInfo(custid:integer, age:integer, cartype:string, highrisk:boolean) • מעונינים למצוא חוקים מהסוג הבא: "אם הגיל הוא בטווח מסוים והמכונית מסוג מסוים אז הלקוח הוא לקוח בסיכון גבוה" • ניתן להפעיל את החוק על לקוחות חדשים שבאים לבטח את המכונית שלהם
חוקי סיווג (Classification Rules) • צורה כללית: (l1< X1< h1) and ... and (lk < Xk < hk)Y=c • משתמשים בערכים עבור X1,...,Xkלקביעת Y
מינוחים • אטריביוט תלוי (dependent attribute) נקבע בחוק • אטריביוט קובע (predictor attribute) מופיעים בגוף החוק • אטריביוט מספרי: li<=Xi<=hi • אטריביוט קטגורי: Xi in {v1 …vj} • חוקי סיווג (classification rules) – האטריביוט התלוי הוא קטגורי • חוקי רגרסיה (regression rules) – האטריביוט התלוי הוא מספרי
דוגמא (18<age< 25) and (cartype in {Sports,Truck}) highrisk=true
תמיכה וודאות • תמיכה: תמיכה בתנאי C היא אחוז הרשומות שמספקות את C • התמיכה בחוק C1C2 היא התמיכה בתנאי C1 and C2 • וודאות: הודאות של חוק C1C2 היא אחוז הרשומות שמספקות את C2 מבין הרשומות שמספקות את C1
עצי בחירה (עצי סיווג) Age <=25 >25 Car Type no Sedan Sports, Truck no Yes ניתן לייצר חוקי סיווג ממסלולים משורש העץ לעלה