پیش‌بینی قیمت املاک

تغییرات پروژه از ابتدا تا تاریخ 1396/08/29
اگر تجربه جستجو برای خرید و یا اجاره خانه در شهر را داشته باشید، متوجه می‌شوید علاوه پارامترهای ساده‌ای از قبیل متراژ ومحله ، پارامترهای زیادی هستند که در قیمت خانه‌ها تاثیر می‌گذارند، مثلا سال ساخت، تعداد اتاق‌ها و یا حتی این که در چه طبقه‌ای باشد، بر قیمت خانه تاثیرگذار است. در واقع فروشنده‌های حرفه‌ای واحدهای مسکونی بر مبنای همین پارامترها بر روی املاک قیمت‌گذاری می‌کنند.
پس می‌توان از یک کامپیوتر هم انتظار داشت که اگر دانش مربوط به تاثیر پارامترها در قیمت مسکن را آموزش ببیند، همانند یک دلال حرفه‌ای مسکن بتواند قیمت دقیق واحدهای مسکونی را پیش‌بینی کند.
در این پروژه شما باید با استفاده از مجموعه داده‌های موجود در [این مسابقه](https://www.kaggle.com/c/house-prices-advanced-regression-techniques)، بتوانید سامانه‌ای برای پیش‌بینی قیمت مسکن آموزش دهید.

# مقدمه

در این مقاله می خواهیم با دانش و تجربه کم خود در بحث خرید و فروش املاک و مستغلات پا جای پای بزرگانی همچون رابرت کیوساکی (نویسنده کتاب پدر پولدار و پدر بی پول) و دارن هاردی (نویسنده کتاب اثر مرکب) بگذاریم.
به این سوال جواب خواهیم داد که آیا کامپیوتر ها هم میتوانند با داشتن اطلاعات کافی همچون آنان پیش بینی و انتخاب درست را در بازار شلوغ املاک داشته باشند؟!

قیمت املاک به شاخص ها و متغیرهای فراوانی مانند متراژ، منطقه، سطح فرهنگی و اقتصادی جامعه و ... بستگی دارد. تشخیص و پیش بینی آن با توجه به همه این عناوین کار ساده ای نیست و به سالها تجربه و کار در این زمینه نیاز دارد. نیاز به بیان نیست که توانایی پیش بینی در این عرصه چقدر می‌تواند ارزشمند باشد.
در اینجا روش هایی را مطرح، نقد و بررسی می‌کنیم و می گوییم که چگونه می‌توان توسط آنها این تجربه‌ی گران بها را با استفاده از "یادگیری ماشین"  یا "machine learning" به کامپیوتر منتقل کرد.

# کارهای مرتبط
حل مسئله‌های پیش بینی با یادگیری ماشین و عموماً مسائلی که در آن داد های قبلی وجود دارد که ماشین توسط آن داده قبلی ردیف های بعدی را پیش بینی می کند معمولا با الگوریتم های **پسرفتی** یا **regression** انجام می گیرد.

**پسرفتی یا regression چیست؟!**
در الگوریتم های regression ماشین داده های قبلی را تحلیل کرده و توسط آن مدلی می‌سازد و الگو را یاد می گیرد، سپس توسط آن مدل با احتمال خوبی داده های بعدی را پیش بینی می کند. به طور ساده regression یک ابزاری یادگیری ماشین است که کمک میکنند با یادگیری روابط بین متغیر هدف (خروجی) و متغیرهای دیگر (ورودی) - که از داده های آماری قبلی به دست آمده - ‌ پیش‌بینی‌کنیم.
با این تعریف متغیر هدف ما که قیمت مثلا یک خانه است به متغیرهای دیگری همچون تعداد اتاق ها، متراژ، همسایگی آن خانه، منطقه و ... بستگی دارد. اگر ما یادگیری ماشین را به این متغیر ها اعمال کنیم می‌توانیم ارزش یک خانه را در یک منطقه جغرافیایی مشخص محاسبه کنیم.
عملکرد پسرفت ساده است : توسط داده های قبلی کافی رابطه بین متغیر هدف و متغیرهای دیگر را پیدا کرده و این رابطه را در داده های مشاهده شده واقعی اعمال می کنیم.
برای اینکه نشان بدهیم پسرفت چگونه کار می کنند مثالی ساده می زنیم :
در محاسبه قیمت یک ملک (متغیر هدف) فقط یک متغیر را در نظر می گیریم و آن هم مساحت آن خانه است (متغیر های دیگر).منطقی است که قیمت خانه ها رابطه‌ی خطی با مساحت  دارند. پس :
y = k0 + k1 * x
که در آن y قیمت ملک و x مساحت آن است.
حال کافیست با استفاده از الگوریتم های regression ضرایب k0 و k1 را بدیت بیاوریم و در پیش‌بینی بعدی از آن استفاده کنیم.

![در این عکس x مساحت خانه و y قیمت آن است. نقاط سیاه مشاهدات ما هستند. خطوط متغیر نشان می‌دهند وقتی k0 و k1 را تغییر می‌دهیم چه اتفاقی می‌افتد.](https://lh4.googleusercontent.com/k-MKW_9H0l3PK80m9GsIPtKVEPX9bNpNqFYVGumB5rnkzdUAR4SjuXZYlluFJNZJDQ5P0k0s5EzYhZUAmekTsNNPxy_2D8xbsJnkSUiJfdBWXQe7R_54l-gwRpsYme6QArDLwLX_)

----------

**نحوه‌ی استفاده از الگوریتم های regression در یادگیری ماشین**

1.  جمع آوری داده: همان داده ای که ماشین قرار است از آن یاد گرفته و پیش بینی کند.
2.   آنالیز داده: تبدیل داده به فرمی که برای ماشیین قابل فهم باشد. فرمی که تمامی متغیر های وابسته به هر مورد در یک ردیف داده مشخص شده است.
مثال هایی از متغیر هایی که در این مرحله به هر ردیف نسبت داده می‌شود:
دارای باغ
سال ساخت
منطقه
متراژ (مساحت کل)
دارای گاراژ
تعداد اتاق خواب
سطح زندگی (سطح زندگی تعیین شده برای هر منطقه)
نوع ملک (ویلایی-آپارتمان)
...
3. چک کردن همبستگی بین متغیر ها: متغیر هایی که باهم همبستگی قوی دارند باید حذف شوند
4. حذف داده‌های خارج از محدوده
5. **انتخاب الگوریتم regression** : الگوریتم های متعددی برای آنالیز پسرفتی وجوددارد و ما دنبال دقیق ترین آن‌ها هستیم. ولی چگونه می‌توان دقت را بررسی کرد؟روش رایج برای این کار r^2 نام دارد که عملا یک امتیاز به اندازه‌ی مربع تفاضل قیمت پیش بینی شده و قیمت اصلی است. برای این کار معمولا از ۸۰٪ داده برای یادگیری و از ۲۰٪ باقیمانده برای تست دقت پیش بینی استفاده می‌شود.  

حرف های بیان شده خلاصه‌ای ساده و قابل فهمی از این دو مقاله ( [۱] و  [۲]) و کلاس دکتر Andrew Ng بود که توضیخات دقیق تر در آنان راجع به تک تک الگوریتم ها بیان شده.
در این مقاله [۱] انواع الگوریتم‌های regression معرفی و توضیح داده شده و در این مقاله  [۲] مقایسه‌ی خوبی بین آنها بیان شده.

# آزمایش‌ها

# مراجع
+ [آموزش یادگیری ماشین با مثال پیش بینی قیمت املاک](https://www.coursera.org/learn/machine-learning)
+  [۱]: Predicting House Prices Using Multiple Listings Data Journal of Real Estate Finance and Economics
+  [۲]:   Spatial Dependence, Housing Submarkets, and House Price Prediction by Steven C. Bourassa, Eva Cantoni, Martin Hoesly- J Real Estate Finan Econ
+ [پیاده سازی مسئله با پایتون](https://github.com/anindya-saha/Machine-Learning-with-Python/blob/master/Coursera-Machine-Learning-Foundations/Regression-Predicting-House-Prices-Tutorial.ipynb)
+  [۳]: Determinants of house prices in Turkey: Hedonic regression versus artificial neural netwok by Hassan Selim

# پیوندهای مفید


+ [لینک صفحه مسابقه پیش‌بینی قیمت املاک](https://www.kaggle.com/c/house-prices-advanced-regression-techniques)
+ [Case Study - Predicting Housing Prices](https://www.coursera.org/learn/ml-regression)
+ [Example of logistic regression in Python using scikit-learn](http://www.dataschool.io/logistic-regression-in-python-using-scikit-learn/)
+ [Supervised learning: predicting an output variable from high-dimensional observations](http://scikit-learn.org/stable/tutorial/statistical_inference/supervised_learning.html)