תחזית מחירי בית בארה'ב

Thzyt Mhyry Byt B Rh B



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

במדריך זה נראה כיצד לחזות את מחיר הבתים בארה'ב באמצעות Machine Learning דרך Python. ראשית, אנו דנים במערך הנתונים שבו אנו משתמשים ולאחר מכן מעבדים מראש את הנתונים. לאחר מכן, אנו מדמיינים את התכונות הקיימות במערך הנתונים ומיישמים אלגוריתמים שונים של למידת מכונה על מערך ההדרכה (סיאטל, וושינגטון אוגוסט 2022 - דצמבר 2022). לבסוף, אנו מסיימים את המדריך הזה בחיזוי המחיר של כמה בתים שנמצאים במערך הנתונים של הבדיקה. לפני שניגשים ליישם פרויקט זה, עלינו להבין את הטרמינולוגיות של למידת מכונה המשמשות בפרויקט זה.







נְסִיגָה

ב- Machine Learning, אם אתה עובד עם נתונים מספריים, אתה צריך להבין רגרסיה. רגרסיה היא טכניקת למידה מפוקחת בלמידת מכונה המשמשת להבנת הקשר בין תכונות עצמאיות לתכונות תלויות (תווית כיתה/יעד). המכונה חוזה את מחיר הבית על ידי לימוד כל רשומה שקיימת במערך הנתונים. לפיכך, מדובר בלמידה מפוקחת.



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



1. רגרסיה לינארית

אלגוריתם הרגרסיה הלינארית מציג קשר ליניארי בין משתני התכונה התלויה (Y) והתכונה הבלתי תלויה (X). מבחינה מתמטית, אנו יכולים להעריך זאת באופן הבא:





ו = aX+b

כאן, 'a' ו-'b' הם מקדמים ליניאריים.

ב-Python, LinearRegression() זמין במודול 'sklearn.linear_model'. נראה כיצד לציין זאת תוך כדי יישום הפרויקט. להלן המודל עם פרמטרים:



2. עץ החלטות

בעצם, עץ החלטות הוא ייצוג גרפי לקבלת כל הפתרונות האפשריים לבעיה בהתבסס על התנאים הניתנים באמצעות הצמתים. צומת ההחלטה משמש לקבלת ההחלטה וצומת העלה מתייחס לפלט של החלטה ספציפית. אנחנו יכולים לחזות את המחיר של הבית שלנו עם ה-Decision Tree Regressor.

ב-Python, ה-DecisionTreeRegressor זמין במודול 'sklearn.tree'. נראה כיצד לציין זאת תוך כדי יישום הפרויקט. להלן המודל עם פרמטרים:

3. יער אקראי

Random Forest מבצע את אותה פונקציונליות הדומה לעץ החלטות. אבל צריך יער (אוסף של עצי החלטה) ולשלב (ערך ממוצע) את כל התפוקות של עצי ההחלטה. לדוגמה, גודל היער האקראי הוא 3. אז, פנימית, נוצרים שלושה עצי החלטה ותוצאת מחיר הבית של עץ ההחלטה הראשון היא 20000. תוצאת מחיר הבית של עץ ההחלטה השני היא 20000. ותוצאת מחיר הבית של עץ ההחלטות האחרון הוא 10000. 16,666.666 היא התוצאה הסופית ((20000+20000+10000)/3).

ב-Python, RandomForestRegressor זמין במודול 'sklearn.ensemble'. להלן המודל עם פרמטרים. אנו יכולים לציין את מספר העצים בפרמטר 'n_estimators'. זה 100 כברירת מחדל.

יישום

ראה במהירות את השלבים הכרוכים בחיזוי מחיר הבתים בארה'ב. אנו מחשיבים את מערך הנתונים houses_train (קובץ CSV) עם רשומות 2016 (המשמש לאימון המודל של Machine Learning). לאחר מכן, אנו חוזים את רשומות המחיר של הבית (505) שנמצאות בקובץ house_test.

1. טעינת מערכי הרכבת והבדיקה

Pandas הוא המודול הזמין ב- Python המשמש לניתוח נתונים. אנו משתמשים במודול זה כדי לטעון את מערכי הנתונים לתוך סביבת Python. כאן, אנו משתמשים ב- Google Co כמו סביבת הקוד. זה זמין בחינם. צריך רק חשבון גוגל.

ראשית, עלינו לטעון את הקבצים מהמחשב המקומי שלנו ל-Colab Env. הורד את מערכי הנתונים מ כאן .

# העלה קבצי houses_train.csv ו-house_test.csv ל-Google Colab שלך

# אחד אחרי השני.

מ גוגל. ET AL יְבוּא קבצים

קבצים. להעלות ( )

ה-read_csv() הוא הפונקציה המשמשת לטעינת נתוני ה-CSV למשתנה. זה לוקח את שם הקובץ כפרמטר.

יְבוּא פנדות

# טען את ה-houses_train.csv למשתנה train_data

train_data = פנדות. read_csv ( 'houses_train.csv' )

# טען את ה-house_test.csv למשתנה test_data

test_data = פנדות. read_csv ( 'house_test.csv' )

# אחסן את test_data במשתנה test_data1

test_data1 = test_data

הבה נראה את ספירת העמודות ואת ספירת הרשומות שאינן אפס בכל עמודה. ה-Pandas.DataFrame.info() משמש כדי לקבל מידע זה.

הדפס ( train_data. מידע ( ) )

הדפס ( test_data1. מידע ( ) )

תְפוּקָה:

2. עיבוד נתונים מראש

בשני מערכי הנתונים, העמודה 'lot_size' מכילה את הערכים עם sqft ו-acre (תוכל למצוא את השונות על ידי ראיית השורות בעמודה 'lot_size_unit's'). אבל הפורמט צריך להיות ב-sqft. אז, אנחנו צריכים להמיר את הערכים בעמודה 'lot_size' מ-acre ל-sqft. באופן דומה, זה צריך להיעשות עבור 'test_data1'.

ה-DataFrame.loc[] משמש כאן כדי למצוא את 'lot_size_units' עם 'acre' ולהכפיל את הערך שקיים ב-'lot_size' עם 43560.

# המר את ערכי lot_size acre ל-Foots Square ב-train_data

train_data. מקום [ ( train_data [ 'יחידות_גודל_lot' ] == 'אַקְר' ) , 'גודל מגרש' ] = train_data [ 'גודל מגרש' ] * 43560

# המר את ערכי lot_size acre ל-Footers Square ב-test_data1

test_data1. מקום [ ( test_data1 [ 'יחידות_גודל_lot' ] == 'אַקְר' ) , 'גודל מגרש' ] = test_data1 [ 'גודל מגרש' ] * 43560

הדפס ( train_data. רֹאשׁ ( ) )

הדפס ( test_data1. רֹאשׁ ( ) )

תְפוּקָה:

כעת, תראה שכל הערכים בעמודה 'lot_size' הם ערכי sqft.

אתה רואה כמה ערכים חסרים בעמודה זו. בואו נחליף את ערכי ה-NaN שקיימים בעמודות בממוצע של אותה עמודה בשני מערכי הנתונים.

ה-DataFrame['column_name'].fillna() משמש למילוי הערכים החסרים בממוצע באמצעות הפונקציה mean() . ה-DataFrame['column_name'].mean() מועבר כפרמטר לפונקציה finna(). בואו נציג את הממוצע ונראה את הספירה כעת:

# מלא את הערכים החסרים הקיימים בעמודת lot_size עם ממוצע הערכים הקיימים

train_data [ 'גודל מגרש' ] = train_data [ 'גודל מגרש' ] . להרגיש ( train_data [ 'גודל מגרש' ] . מתכוון ( ) )

# ממוצע תצוגה

הדפס ( 'ערך ממוצע של נתוני רכבת: ' , train_data [ 'גודל מגרש' ] . מתכוון ( ) )

הדפס ( רק ( train_data [ 'גודל מגרש' ] ) )

# מלא את הערכים החסרים הקיימים בעמודת lot_size עם ממוצע הערכים הקיימים

test_data1 [ 'גודל מגרש' ] = test_data1 [ 'גודל מגרש' ] . להרגיש ( test_data1 [ 'גודל מגרש' ] . מתכוון ( ) )

# ממוצע תצוגה

הדפס ( 'ערך ממוצע של נתוני בדיקה: ' , test_data1 [ 'גודל מגרש' ] . מתכוון ( ) )

הדפס ( רק ( test_data1 [ 'גודל מגרש' ] ) )

תְפוּקָה:

הערכים החסרים הקיימים בעמודה 'lot_size' ערכת נתוני רכבת מוחלפת בערך הממוצע של 18789.95194 והערכים החסרים הקיימים בעמודה 'lot_size' ערכת נתונים בדיקה מוחלפת בערך הממוצע של 8961.0

3. ניקוי נתונים

בזמן אימון המודל, ישנן כמה תכונות מיותרות שאינן נדרשות כדי לחזות את התוצאה. במקרה שלנו, ישנן שלוש תכונות שהן 'lot_size_units', 'zip_code' ו-'size_units' שיש להסיר משני מערכי הנתונים. ה- pandas.DataFrame.drop() משמש להסרת שלוש העמודות הללו משני מערכי הנתונים.

train_data = train_data. יְרִידָה ( [ 'יחידות_גודל_lot' , 'מיקוד' , 'יחידות_גודל' ] , צִיר = 1 )

test_data1 = test_data1. יְרִידָה ( [ 'יחידות_גודל_lot' , 'מיקוד' , 'יחידות_גודל' ] , צִיר = 1 )

הדפס ( train_data. מידע ( ) )

הדפס ( test_data1. מידע ( ) )

תְפוּקָה:

כעת, מערכי הנתונים במצב טוב. עמודות מיותרות מוסרות והערכים החסרים אינם קיימים.

4. הדמיית נתונים

בואו ניצור היסטוגרמה עבור העמודות של נתוני הרכבת. הפונקציה pandas.DataFrame.hist() משמשת ליצירת היסטוגרמות עבור כל התכונות.

train_data. היסט ( גודל התאנה = ( 4 , 9 ) )

תְפוּקָה:

היסטוגרמה נוצרת עבור עמודות מיטות, אמבטיות, גודל, lot_size ומחיר עבור נתוני הרכבת.

בואו ניצור את המתאם עבור כל השדות ביחס זה לזה. מודול Plotly.express משמש כדי לשרטט את הערכים המתואמים.

יְבוּא עלילתית. אֶקְסְפּרֶס

corr = train_data. corr ( )

# ציירו את הנתונים המתואמים

view_fig = עלילתית. אֶקְסְפּרֶס . imshow ( corr , text_auto = נָכוֹן )

# תצוגה

view_fig. הופעה ( )

תְפוּקָה:

  1. המיטות נמצאות בקורלציה של 0.2935 למחיר, -0.059 בקורלציה לגודל_lot, 0.77 בקורלציה לגודל ו-0.65 בקורלציה לאמבטיות.
  2. האמבטיות נמצאות בקורלציה של 0.3173 למחיר, -0.054 בקורלציה לגודל_מגרש, 0.667 בקורלציה לאמבטיות ו-0.771 בקורלציה למיטות.
  3. הגודל הוא 0.444 בקורלציה למחיר, -0.044 בקורלציה ל-lot_size, 0.667 בקורלציה לגודל ו-0.652 בקורלציה למיטות.

5. הכנת דגם

עלינו להגדיר את המחיר כיעד על ידי הסרתו מ-train_data. ודא שהתכונות הקיימות בנתוני הרכבת והבדיקה צריכות להיות זהות בשלב זה.

יַעַד = train_data [ 'מחיר' ]

train_data = train_data. יְרִידָה ( [ 'מחיר' ] , צִיר = 1 )

הדפס ( train_data. מידע ( ) )

הדפס ( test_data1. מידע ( ) )

תְפוּקָה:

כעת, ישנן ארבע תכונות עצמאיות (מיטות, אמבטיות, גודל וגודל_lot) והמחיר הוא התכונה התלויה שתלויה בארבע התכונות הללו.

6. הכשרת המודל

ראשית, אנו מיישמים את אלגוריתם RandomForestRegressor. ייבא אותו מחבילת 'sklearn.ensemble'. זוהי טכניקת אנסמבלינג.

  1. צור מודל מה-RandomForestRegressor(). אנחנו לא מעבירים שום פרמטר למודל הזה. אז, מספר עצי ההחלטה הוא 100 כברירת מחדל.
  2. השתמש בשיטת fit() כדי להתאים למודל. זה דורש שני פרמטרים. הפרמטר הראשון הוא התכונות התלויות והפרמטר השני הוא התווית/יעד המחלקה.
  3. השתמש בשיטת score() כדי לראות את דיוק המודל. זה גם לוקח את אותם פרמטרים דומים לשיטת fit() .
מ מְלוּמָד מִכלוֹל יְבוּא RandomForestRegressor

# הגדר את המודל

דגם 1 = RandomForestRegressor ( )

# התאם את הדגם

דגם 1. לְהַתְאִים ( train_data , יַעַד )

# דיוק דגם

הדפס ( דגם 1. ציון ( train_data , יַעַד ) * 100 )

תְפוּקָה:

86.08400889419033

7. בדוק את הדגם ואחסן את התוצאות

זהו השלב האחרון שבו עלינו לחזות את התוצאה ולאחסן אותן.

  1. שיטת predict() משמשת לניבוי נתוני ה-Test. הוא משמש עם המודל ולוקח את רשימת הערכים המקוננת/DataFrame.
  2. השתמש בשיטת to_csv() כדי לאחסן את התוצאות בקובץ ה-CSV.
  3. הורד את הקובץ מסביבת Python (Google Colab).
# חזה את test_data1 עם model1.

test_data [ 'מחיר' ] = דגם 1. לנבא ( test_data1 )

# שמור את test_data ב-test_results.csv

test_data. to_csv ( 'test_results.csv' )

# הורד את הקובץ הזה מה-Colab

קבצים. הורד ( 'test_results.csv' )

תְפוּקָה:

בואו נראה 20 רשומות מתוך 505 רשומות. אתה יכול לראות שהעמודה מחיר מכילה את הערכים החזויים עבור כל בית.

דגמים אחרים

בואו נחזה את הבתים באמצעות DecisionTreeRegressor. אתה יכול לייבא אותו מהמודול 'sklearn.tree'.

מ מְלוּמָד עֵץ יְבוּא DecisionTreeRegressor

# הגדר את המודל

דגם2 = DecisionTreeRegressor ( )

# התאם את הדגם

דגם2. לְהַתְאִים ( train_data , יַעַד )

# דיוק דגם

הדפס ( דגם2. ציון ( train_data , יַעַד ) * 100 )

# חזה את test_data1 עם model1.

test_data [ 'מחיר' ] = דגם2. לנבא ( test_data1 )

# שמור את test_data ב-test_results.csv

test_data. to_csv ( 'test_results.csv' )

# הורד את הקובץ הזה מה-Colab

קבצים. הורד ( 'test_results.csv' )

תְפוּקָה:

99.94183165335028

אתה יכול לראות את התוצאה החזויה כאן:

בואו נחזה את הבתים באמצעות LinearrRegression. ייבא את המודל מהמודול 'sklearn.linear_model'.

מ מְלוּמָד ליניארי_מודל יְבוּא רגרסיה לינארית

# הגדר את המודל

דגם 3 = רגרסיה לינארית ( )

# התאם את הדגם

דגם 3. לְהַתְאִים ( train_data , יַעַד )

# חזה את test_data1 עם model1.

test_data [ 'מחיר' ] = דגם 3. לנבא ( test_data1 )

# שמור את test_data ב-test_results.csv

test_data. to_csv ( 'test_results.csv' )

# הורד את הקובץ הזה מה-Colab

קבצים. הורד ( 'test_results.csv' )

אתה יכול לראות את התוצאה החזויה כאן:

סיכום

כעת, אתה יכול לחזות את מחיר הבית שלך בהתבסס על תכונות כמו מספר החדרים, שטח הקרקע שלך וכו'. במדריך זה, שקלנו את נתוני הבית האמיתיים מסיאטל, וושינגטון. באמצעות טכניקות רגרסיה כמו רגרסיה לינארית, עץ החלטה ויער אקראי, חזינו את המחיר של 505 בתים. כל השלבים (עיבוד מוקדם של נתונים, ניקוי נתונים והדמיית נתונים) שצריכים להיעשות לפני אימון המודל מוסברים שלב אחר שלב עם קטעי קוד ופלטים.