توقعات أسعار المنازل في الولايات المتحدة

Twq At As Ar Almnazl Fy Alwlayat Almthdt



يعد بناء المنزل أحد العوامل الصعبة في حياتنا. قبل البناء، من الممكن تقدير سعر منزلك بناءً على سعر المنزل السابق. تشمل العوامل التي تؤثر بشكل كبير على سعر المنزل إجمالي عدد الغرف (السرير والحمام وما إلى ذلك) ومساحة الأرض. وبهذا نستطيع تقدير الميزانية اللازمة لبناء المنزل.

سنرى في هذا الدليل كيفية التنبؤ بأسعار المنازل الأمريكية باستخدام التعلم الآلي من خلال لغة بايثون. أولاً، نناقش مجموعة البيانات التي نستخدمها ثم نقوم بمعالجة البيانات مسبقًا. بعد ذلك، نقوم بتصور السمات الموجودة في مجموعة البيانات ونطبق خوارزميات التعلم الآلي المختلفة على مجموعة بيانات التدريب (سياتل، واشنطن أغسطس 2022 - ديسمبر 2022). أخيرًا، ننهي هذا الدليل بالتنبؤ بأسعار بعض المنازل الموجودة في مجموعة بيانات الاختبار. قبل الشروع في تنفيذ هذا المشروع، نحتاج إلى فهم مصطلحات التعلم الآلي المستخدمة في هذا المشروع.







تراجع

في التعلم الآلي، إذا كنت تعمل باستخدام بيانات رقمية، فأنت بحاجة إلى فهم الانحدار. الانحدار هو أسلوب تعلم خاضع للإشراف في التعلم الآلي يُستخدم لفهم العلاقة بين السمات المستقلة والسمات التابعة (تصنيف الفئة/الهدف). تتنبأ الآلة بسعر المنزل من خلال معرفة كل سجل موجود في مجموعة البيانات. ومن ثم، فهو التعلم تحت الإشراف.



على سبيل المثال، في السيناريو الخاص بنا، السمات المستقلة هي عدد الأسرة، وعدد الحمامات، وحجم الأرض، والرمز البريدي، وما إلى ذلك. وبناءً على ذلك، يمكننا التنبؤ بسعر منزلنا. فهذه هي الصفات المستقلة التي لا تعتمد على شيء. السعر هو السمة المستهدفة أو تسمية الفئة التي تعتمد على هذه السمات.



1. الانحدار الخطي

تعرض خوارزمية الانحدار الخطي علاقة خطية بين متغيرات السمة التابعة (Y) والسمة المستقلة (X). رياضيا يمكننا تقييم ذلك على النحو التالي:





و = أكس + ب

هنا، 'أ' و'ب' عبارة عن معاملات خطية.

في لغة Python، يتوفر LinearRegression() في الوحدة النمطية 'sklearn.linear_model'. سنرى كيفية تحديد ذلك أثناء تنفيذ المشروع. وفيما يلي النموذج مع المعلمات:



2. شجرة القرار

في الأساس، شجرة القرار هي تمثيل رسومي للحصول على جميع الحلول الممكنة لمشكلة ما بناءً على الشروط المقدمة باستخدام العقد. يتم استخدام عقدة القرار لاتخاذ القرار وتشير العقدة الورقية إلى مخرجات قرار محدد. يمكننا التنبؤ بسعر منزلنا باستخدام Decision Tree Regressor.

في لغة Python، يتوفر DecisionTreeRegressor في الوحدة النمطية 'sklearn.tree'. سنرى كيفية تحديد ذلك أثناء تنفيذ المشروع. وفيما يلي النموذج مع المعلمات:

3. غابة عشوائية

تؤدي الغابة العشوائية نفس الوظيفة المشابهة لشجرة القرار. لكن الأمر يتطلب غابة (مجموعة من أشجار القرار) ودمج (القيمة المتوسطة) جميع مخرجات أشجار القرار. على سبيل المثال، حجم الغابة العشوائية هو 3. لذلك، داخليًا، يتم إنشاء ثلاث أشجار قرار وتكون نتيجة سعر المنزل لشجرة القرار الأولى هي 20000. وتكون نتيجة سعر المنزل لشجرة القرار الثانية هي 20000. وتكون نتيجة سعر المنزل لشجرة القرار الثانية هي 20000. وتكون نتيجة سعر المنزل لشجرة القرار الثانية هي 20000. شجرة القرار الأخيرة هي 10000. 16,666.666 هي النتيجة النهائية ((20000+20000+10000)/3).

في لغة Python، يتوفر RandomForestRegressor في الوحدة النمطية 'sklearn.ensemble'. وفيما يلي النموذج مع المعلمات. يمكننا تحديد عدد الأشجار في المعلمة 'n_estimators'. وهو 100 بشكل افتراضي.

تطبيق

شاهد بسرعة الخطوات المتبعة في التنبؤ بسعر المنزل الأمريكي. نحن نعتبر مجموعة بيانات house_train (ملف CSV) مع سجلات 2016 (المستخدمة لتدريب نموذج التعلم الآلي). بعد ذلك، نقوم بالتنبؤ بسجلات سعر المنزل (505) الموجودة في ملف house_test.

1. تحميل مجموعات بيانات التدريب والاختبار

Pandas هي الوحدة المتوفرة في Python والتي يتم استخدامها لتحليل البيانات. نحن نستخدم هذه الوحدة لتحميل مجموعات البيانات في بيئة بايثون. وهنا نستخدم شركة جوجل كبيئة الكود. هذا متاح مجانا. هناك حاجة إلى حساب Google فقط.

أولاً، نحتاج إلى تحميل الملفات من جهاز الكمبيوتر المحلي الخاص بنا إلى Colab Env. قم بتنزيل مجموعات البيانات من هنا .

# قم بتحميل ملفات house_train.csv وhouse_test.csv إلى Google Colab الخاص بك

# واحد تلو الآخر.

من جوجل. وآخرون يستورد ملفات

ملفات. رفع ( )

read_csv () هي الوظيفة المستخدمة لتحميل بيانات CSV إلى متغير. يأخذ اسم الملف كمعلمة.

يستورد الباندا

# قم بتحميل ملف house_train.csv في متغير Train_data

Train_data = الباندا. read_csv ( 'houses_train.csv' )

# قم بتحميل ملف house_test.csv في متغير test_data

test_data = الباندا. read_csv ( 'house_test.csv' )

# قم بتخزين بيانات الاختبار في متغير test_data1

test_data1 = test_data

دعونا نعرض الأعمدة وعدد السجلات غير الخالية في كل عمود. يتم استخدام Pandas.DataFrame.info() للحصول على هذه المعلومات.

مطبعة ( Train_data. معلومات ( ) )

مطبعة ( test_data1. معلومات ( ) )

انتاج:

2. المعالجة المسبقة للبيانات

في كلتا مجموعتي البيانات، يحتفظ عمود 'حجم_الحجم' بالقيم بالقدم المربع والفدان (ستجد التباين من خلال رؤية الصفوف في عمود 'حجم_حجم_الوحدة'). ولكن يجب أن يكون التنسيق بالقدم المربع. لذلك، نحن بحاجة إلى تحويل القيم في العمود 'حجم القطعة' من فدان إلى قدم مربع. وبالمثل، يجب القيام بذلك بالنسبة لـ 'test_data1'.

يتم استخدام DataFrame.loc[] هنا للعثور على 'lot_size_units' بـ 'acre' وضرب القيمة الموجودة في 'lot_size' بـ 43560.

# قم بتحويل قيم حجم الفدان إلى قدم مربع في بيانات القطار

Train_data. مكان [ ( Train_data [ 'حجم_الحجم_الوحدات' ] == 'فدان' ) , 'حجم كبير' ] = Train_data [ 'حجم كبير' ] * 43560

# تحويل قيم حجم الفدان إلى قدم مربع في test_data1

test_data1. مكان [ ( test_data1 [ 'حجم_الحجم_الوحدات' ] == 'فدان' ) , 'حجم كبير' ] = test_data1 [ 'حجم كبير' ] * 43560

مطبعة ( Train_data. رأس ( ) )

مطبعة ( test_data1. رأس ( ) )

انتاج:

الآن، سترى أن جميع القيم الموجودة في عمود 'حجم_الحجم' هي قيم قدم مربع.

ترى بعض القيم المفقودة في هذا العمود. لنستبدل قيم NaN الموجودة في الأعمدة بمتوسط ​​نفس العمود في مجموعتي البيانات.

يتم استخدام DataFrame['column_name'].fillna() لملء القيم المفقودة بالمتوسط ​​باستخدام الدالة mean(). يتم تمرير DataFrame['column_name'].mean() كمعلمة إلى الدالة finna(). دعونا نعرض المتوسط ​​ونرى العدد الآن:

# املأ القيم المفقودة الموجودة في عمود حجم القطعة بمتوسط ​​القيم الموجودة

Train_data [ 'حجم كبير' ] = Train_data [ 'حجم كبير' ] . يشعر ( Train_data [ 'حجم كبير' ] . يقصد ( ) )

#عرض المتوسط

مطبعة ( 'بيانات القطار تعني القيمة:' , Train_data [ 'حجم كبير' ] . يقصد ( ) )

مطبعة ( فقط ( Train_data [ 'حجم كبير' ] ) )

# املأ القيم المفقودة الموجودة في عمود حجم القطعة بمتوسط ​​القيم الموجودة

test_data1 [ 'حجم كبير' ] = test_data1 [ 'حجم كبير' ] . يشعر ( test_data1 [ 'حجم كبير' ] . يقصد ( ) )

#عرض المتوسط

مطبعة ( 'بيانات الاختبار تعني القيمة:' , test_data1 [ 'حجم كبير' ] . يقصد ( ) )

مطبعة ( فقط ( test_data1 [ 'حجم كبير' ] ) )

انتاج:

يتم استبدال القيم المفقودة الموجودة في العمود 'lot_size' Train Dataset بالقيمة المتوسطة البالغة 18789.95194 ويتم استبدال القيم المفقودة الموجودة في العمود 'lot_size' Test Dataset بالقيمة المتوسطة البالغة 8961.0

3. تنظيف البيانات

أثناء تدريب النموذج، هناك بعض السمات غير الضرورية التي ليست مطلوبة للتنبؤ بالنتيجة. في حالتنا، هناك ثلاث سمات هي 'lot_size_units' و'zip_code' و'size_units' التي يجب إزالتها من مجموعتي البيانات. يتم استخدام pandas.DataFrame.drop() لإزالة هذه الأعمدة الثلاثة من مجموعتي البيانات.

Train_data = Train_data. يسقط ( [ 'حجم_عدد_الوحدات' , 'الرمز البريدي' , 'وحدات_الحجم' ] , محور = 1 )

test_data1 = test_data1. يسقط ( [ 'حجم_عدد_الوحدات' , 'الرمز البريدي' , 'وحدات_الحجم' ] , محور = 1 )

مطبعة ( Train_data. معلومات ( ) )

مطبعة ( test_data1. معلومات ( ) )

انتاج:

الآن، أصبحت مجموعات البيانات في حالة جيدة. تتم إزالة الأعمدة غير الضرورية ولا توجد القيم المفقودة.

4. تصور البيانات

لنقم بإنشاء رسم بياني لأعمدة بيانات القطار. يتم استخدام الدالة pandas.DataFrame.hist() لإنشاء رسوم بيانية لجميع السمات.

Train_data. اصمت ( com.Figsize = ( 4 , 9 ) )

انتاج:

يتم إنشاء رسم بياني للأسرة والحمامات والحجم وحجم القطعة وأعمدة السعر لبيانات القطار.

لنقم بإنشاء الارتباط لجميع المجالات فيما يتعلق ببعضها البعض. يتم استخدام وحدة Plotly.express لرسم القيم المرتبطة.

يستورد مؤامرة. يعبر

تصحيح = Train_data. تصحيح ( )

# رسم البيانات المرتبطة

view_fig = مؤامرة. يعبر . com.imshow ( تصحيح , text_auto = حقيقي )

# عرض

view_fig. يعرض ( )

انتاج:

  1. الأسرة هي 0.2935 مرتبطة بالسعر، -0.059 مرتبطة بحجم القطعة، 0.77 مرتبطة بالحجم، و 0.65 مرتبطة بالحمامات.
  2. الحمامات هي 0.3173 مرتبطة بالسعر، -0.054 مرتبطة بحجم القطعة، 0.667 مرتبطة بالحمامات، و0.771 مرتبطة بالأسرة.
  3. الحجم هو 0.444 مرتبط بالسعر، -0.044 مرتبط بحجم القطعة، 0.667 مرتبط بالحجم، و0.652 مرتبط بالأسرّة.

5. إعداد النموذج

نحتاج إلى تحديد السعر كهدف عن طريق إزالته من بيانات القطار. تأكد من أن السمات الموجودة في بيانات التدريب والاختبار يجب أن تكون هي نفسها في هذه المرحلة.

هدف = Train_data [ 'سعر' ]

Train_data = Train_data. يسقط ( [ 'سعر' ] , محور = 1 )

مطبعة ( Train_data. معلومات ( ) )

مطبعة ( test_data1. معلومات ( ) )

انتاج:

الآن، هناك أربع سمات مستقلة (الأسرة، والحمامات، والحجم، وحجم القطعة) والسعر هو السمة التابعة التي تعتمد على هذه السمات الأربع.

6. تدريب النموذج

أولاً، نقوم بتطبيق خوارزمية RandomForestRegressor. قم باستيراده من الحزمة 'sklearn.ensemble'. إنها تقنية التجميع.

  1. قم بإنشاء نموذج من RandomForestRegressor(). نحن لا نمرر أي معلمة لهذا النموذج. وبالتالي، فإن عدد أشجار القرار هو 100 بشكل افتراضي.
  2. استخدم طريقة fit() لتناسب النموذج. يستغرق معلمتين. المعلمة الأولى هي السمات التابعة والمعلمة الثانية هي تسمية/هدف الفئة.
  3. استخدم طريقة النتيجة () لمعرفة دقة النموذج. كما أنه يأخذ نفس المعلمات المشابهة للطريقة fit().
من تعلمت فرقة يستورد RandomForestRegressor

# تحديد النموذج

نموذج1 = RandomForestRegressor ( )

#تناسب النموذج

نموذج1. ملائم ( Train_data , هدف )

# دقة النموذج

مطبعة ( نموذج1. نتيجة ( Train_data , هدف ) * 100 )

انتاج:

86.08400889419033

7. اختبر النموذج وقم بتخزين النتائج

هذه هي الخطوة الأخيرة حيث نحتاج إلى التنبؤ بالنتيجة وتخزينها.

  1. يتم استخدام طريقة التنبؤ () للتنبؤ ببيانات الاختبار. يتم استخدامه مع النموذج ويأخذ قائمة القيم/DataFrame المتداخلة.
  2. استخدم طريقة to_csv() لتخزين النتائج في ملف CSV.
  3. قم بتنزيل الملف من بيئة بايثون (Google Colab).
# توقع test_data1 باستخدام النموذج 1.

test_data [ 'سعر' ] = نموذج1. يتنبأ ( test_data1 )

# احفظ بيانات الاختبار في 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 باستخدام النموذج 1.

test_data [ 'سعر' ] = نموذج2. يتنبأ ( test_data1 )

# احفظ بيانات الاختبار في test_results.csv

test_data. to_csv ( 'test_results.csv' )

# قم بتنزيل هذا الملف من Colab

ملفات. تحميل ( 'test_results.csv' )

انتاج:

99.94183165335028

يمكنك رؤية النتيجة المتوقعة هنا:

دعونا نتنبأ بالمنازل باستخدام LinearrEgression. قم باستيراد النموذج من الوحدة النمطية 'sklearn.linear_model'.

من تعلمت نموذج خطي يستورد الانحدارالخطي

# تحديد النموذج

model3 = الانحدارالخطي ( )

#تناسب النموذج

model3. ملائم ( Train_data , هدف )

# توقع test_data1 باستخدام النموذج 1.

test_data [ 'سعر' ] = model3. يتنبأ ( test_data1 )

# احفظ بيانات الاختبار في test_results.csv

test_data. to_csv ( 'test_results.csv' )

# قم بتنزيل هذا الملف من Colab

ملفات. تحميل ( 'test_results.csv' )

يمكنك رؤية النتيجة المتوقعة هنا:

خاتمة

الآن، أنت قادر على التنبؤ بسعر منزلك بناءً على سمات مثل عدد الغرف ومساحة أرضك وما إلى ذلك. في هذا الدليل، أخذنا في الاعتبار بيانات المنزل الحقيقية من سياتل، واشنطن. باستخدام تقنيات الانحدار مثل الانحدار الخطي، وشجرة القرار، والغابة العشوائية، توقعنا سعر 505 منزلاً. يتم شرح جميع الخطوات (المعالجة المسبقة للبيانات، وتنظيف البيانات، وتصور البيانات) التي يجب إجراؤها قبل تدريب النموذج خطوة بخطوة باستخدام مقتطفات ومخرجات التعليمات البرمجية.