Machine learning ในการประเมินราคาคอนโด

แม้ว่า ประเทศไทยประสบปัญหาโรคระบาด แต่ปัจจัยที่อยู่อาศัย ไม่ได้ซบเซาอย่างที่คิด ดูได้จาก จำนวน คอนโดในกรุงเทพ มีให้เลือก ช็อป เต็มไปหมด ขนาดห้องก็มีหลายหลาก ราคาก็มีหลากหลาย ความสูงก็มีทั้ง high rise และ low rise ทั้งโครงการขึ้นใหม่ และโครงการเก่า แล้วจะรู้ได้อย่างไรว่า ราคาควรเป็นเท่าไร

วันนี้ลองมาใช้ความรู้ทาง machine learning มาช่วยให้คุณสามารถตัดสินใจในเรื่องของการประเมินราคาคอนโด เริ่มจาก หากเราต้องการประมาณราคาว่าราคาประมาณไหนสมเหตุสมผล โดยเรียนรู้จาก ข้อมูลในอดีตที่เกิดขึ้นจริง เช่น ที่ตั้งของคอนโด, ปีที่สร้างเสร็จ, พื้นที่โครงการ (ตารางเมตร),จำนวนตึก, การเปลี่ยนแปลงราคาเสนอขายจากไตรมาสที่แล้ว ฯลฯ

1. เริ่มจาก ตั้งการตั้งความคาดหวัง

ถ้าความคาดหวังคือ ประมาณราคาว่าราคาประมาณไหนสมเหตุสมผล เรามาตั้งโจทย์ในการสร้างโมเดลคือ ซื้อราคาถูก แม้ว่าเศรษฐกิจจะไม่ดี สมมุติว่าเราอยากได้ห้องเล็กหรือห้องใหญ่ อยู่ติดรถไฟฟ้ารึเปล่า Area ไหน อยู่เองหรือปล่อยเช่า หลังจากที่รู้สิ่งที่ต้องการชัดเจนแล้ว เรื่องราคานั้น ไม่ต้องห่วง เรามีตัวช่วยให้ เพื่อให้คุณได้คอนโดที่ต้องการในราคาที่เหมาะสมที่สุด ไม่ว่าจะเป็นราคาซื้อ (ควรต่อรองเท่าไหร่ดี) การตั้งราคาขายที่เหมาะสม(ถ้าขายปีหน้าจะได้ราคาดีกว่านี้) เพื่อให้คุณไม่ต้องซื้อคอนโดในราคาที่แพงเกินไป หรือติดดอยในอนาคต

เราจะเริ่มต้นจากการพัฒนาโมเดล machine learning สำหรับทำนายราคาคอนโด โดยการใช้ภาษา python เมื่อป้อนเข้าโมเดลของเรา ก็จะได้ออกมา เป็นราคาคอนโดที่โมเดลทำนายออกมา ข้อมูลที่จะนำมาใช้ในการพัฒนาในครั้งนี้ ได้มาจาก https://www.baania.com ด้วยวิธี web data extraction ของปี 2019

โครงสร้างข้อมูล โดยใช้คำสั่ง info

โดยมีแหล่งข้อมูลมาจาก Dataset หรือชุดข้อมูลประกอบด้วยข้อมูลดังต่อไปนี้
1. Condo_NAME_EN ชื่อโครงการ (ภาษาอังกฤษ)
2. Condo_NAME_TH ชื่อโครงการ (ภาษาไทย)
3. Condo_area เขตที่อยู่อาศัย
4. Condo_link URL ของข้อมูล
5. Address_TH ที่ตั้งของคอนโด
6. Year_built ปีที่สร้างเสร็จ
7. Area_m2 พื้นที่โครงการ (ตารางเมตร)
8. #_Tower จำนวนตึก
9. #_Floor จำนวนชั้น
10. Sale_Price_Sqm ราคาขายต่อตารางเมตร
11. Sale_Price_Increment[Quarter] การเปลี่ยนแปลงราคาเสนอขายจากไตรมาสที่แล้ว
12. Sale_Price_Inc[Year] การเปลี่ยนแปลงราคาเสนอขายจากปีที่แล้ว
13. Rental_Yield ผลตอบแทนค่าเช่า
14. Rental_Yield_Inc[Year] การเปลี่ยนแปลงผลตอบแทนจากค่าเช่าจากปีที่แล้ว
15. Latitude พิกัดละติจูด
16. Longtitude พิกัดลองจิจูด
17. All_Data (TRUE) ตรวจสอบคุณภาพข้อมูลว่าไม่เป็นค่าว่าง ปีที่สร้างเสร็จ ราคาขายต่อตารางเมตร ผลตอบแทนค่าเช่า
18. MinDist_Station ระยะห่างจากสถานีรถไฟฟ้า
19. Condo_Area_corr เขตที่อยู่อาศัย และ จังหวัด

พบว่ามีข้อมูล 2329 ตัวอย่างจริงจาก web siteโดยมีค่า null เยอะพอสมคาร ซึ่งต้องทำการ clean data ก่อนจะสร้างโมเดล

2. ทำความสะอาด (clean) ข้อมูล

ก่อนจะนำข้อมูลเข้าไปเทรนโมเดลต่างๆ เราก็ต้องจัดการ clean ข้อมูลให้เหมาะสม เพื่อให้โมเดลสามารถทำความเข้าใจข้อมูลเหล่านั้นได้อย่างมีประสิทธิภาพ

เราเริ่มจากการพิจารณาดูว่ามีคอลัมน์ไหนที่ไม่มีความหมาย หรือไม่มีความสำคัญบ้าง พบว่า

· ID เป็นการรันตัวเลข ID เฉยๆ

· Condo_NAME_EN , Condo_NAME_TH เป็นชื่อคอนโด มีความแตกต่างกันอย่างมากในแต่ละ example และไม่น่ามีความสำคัญต่อราคา

· Condo_link เป็นเพียง link ไปยังหน้าเพจข้อมูลของคอนโดนั้นๆ

· All_Data เป็นแค่การเช็คว่าเก็บข้อมูลมาครบไหม

· Condo_Area_corr ก็เก็บข้อมูลเขต ซ้ำซ้อนกับ Condo_area

Drop คอลัมน์เหล่านี้ออกไป

จากนั้นเราจะลองหาดูว่ามีข้อมูลส่วนไหนที่เป็นค่าว่าง (Null) บ้าง

พบว่า Area_m2 , #_Floor, Sale_Price_Inc[Year], Rental_Yield_Inc[Year] มี ค่าว่าง (null) และ มี outlier โดยเริ่มจากการ plot กราฟ boxplot

จะเห็นได้ว่า Area_m2 (พื้นที่คอนโดทั้งหมด) เป็น outlier จำนวนมาก และเป็น คอนโดที่สร้างในปี 2010 มีพื้นที่โครงการที่อยู่ในช่วง outlier มากที่สุด (เป็นข้อมูลจริง ไม่ใช่ error จากการ กรอก ข้อมูลผิด) และ หากทำการลบออก ก็จะเสียข้อมูลจำนวนมากเกินไป จึงจะยังไม่เอา outlier ในส่วนนี้ออกไป

รูปที่ 2: histogram ของ Area_m2 ก่อนแทนที่ค่าว่าง

2.1. แทนค่า ค่าว่าง (null)ดูการกระจายตัวของข้อมูล ด้วย histogram ของ Area_m2 กับ Sale_Price_INC[year] พบว่า เบ้ซ้ายมาก (skew) หากแทนที่ข้อมูลที่มีค่าว่าง น่าจะลดการเบ้ (skew) ลงได้ เห็นว่าข้อมูลของทั้ง 2 คอลัมน์จะกระจุกตัวอยู่ในช่วงแคบๆ เราจึงจะแทนค่า missing data ของ 2 คอลัมน์นี้ด้วยค่า median น่าจะให้ผลลัพธ์ที่ถูกต้องกว่าการใช้ค่า mean

ผลลัพธ์ที่ได้

รูปที่ 3: histogram ของ Area_m2 แทนที่ค่าว่างด้วย median

จากรูปที่ 3 จะเห็นไว้ว่า เบ้ซ้ายน้อยลง กลับมากระจายตัวแบบโค้งปกติ ส่วนคอลัมน์ Rental_Yield_Inc[Year] มี ค่าว่าง (null) จำนวนมาก และได้แทนค่าว่างด้วย means แต่การกระจายตัวเหมือนเดิม เพราะ ไม่ได้เบ้ซ้าย (skew) มากมาย มาตั้งแต่แรก จึงไม่ค่อยมีผลเท่าไร

2.2. หาความสัมพันธ์

รูปที่ 4 หาความสัมพันธ์

ตรวจสอบ correlation ระหว่าง feature ต่างๆ กับ ราคาคอนโดต่อตร.ม. ว่ามี feature ใดบ้างที่น่าจะมีความสำคัญในการทำนายราคา

พบว่า ปีที่สร้าง (Year_bulit) กับ ระยะห่างจากสถานีรถไฟฟ้า (MinDist_Station) มี correlation ที่สูง น่าจะเป็น feature ที่ช่วยให้โมเดลทำนายได้ดี ส่วน Sale_Price_Inc[Year] กับ Sale_Price_Increment[Quarter] ไม่ค่อยมี correlation กับราคา จึงจะดรอป 2 คอลัมน์นี้ออก

ลอง plot graph ดูการกระจายตัวของ ปีที่สร้างคอนโด กับราคาขาย

พบว่า ปีที่สร้าง Year_bulit กับ ราคาเสนอขายต่อตารางเมตร Sale_Price_Sqm มีความสัมพันธ์กันในรูปแบบเชิงเส้น จึงน่าจะเป็น feature ที่ช่วยให้โมเดลทำนายได้ดี

สุดท้าย ลองทดสอบหาค่าว่าง อีกที

จะเห็นได้ว่า ไม่เหลือค่าว่างแล้ว จากนั้นเราสามารถ สร้าง โมเดล ด้วย LinearRegression

เราสามารถ เรียกดูค่าสัมประสิทธิ์ เพื่อ ผูกสูตร

Y= -4640017+ 2.363(Year_built)+ (-5.314)Area_m2+(1.289)#_Tower+ (1.447)#_Floor+(-3.183)Rental_Yield + (-3.79)Rental_Yield_Inc[Year] + (-7.265)MinDist_Station

และสามารถเรียกดูค่าที่ทำนาย เปรียบเทียบค่าจริง

--

--

รศ. ดร. เชฏฐเนติ ศรีสอ้าน
รศ. ดร. เชฏฐเนติ ศรีสอ้าน

Written by รศ. ดร. เชฏฐเนติ ศรีสอ้าน

รองอธิการบดีฝ่ายเทคโนโลยี มหาวิทยาลัยรังสิต

No responses yet