การเข้ารหัสตามฤดูกาลเพื่อปรับปรุงโมเดลการประเมินมูลค่าทรัพย์สินของเรา
บทนำ
ที่ Homebound ทีม Machine Learning & Pricing มีหน้าที่รับผิดชอบในการพัฒนาและบำรุงรักษา Automated Valuation Model (AVM) เพื่อคาดการณ์มูลค่าของอสังหาริมทรัพย์อย่างแม่นยำ ในที่นี้เรียกว่า Homebound Valuation Model (HVM) คุณลักษณะต่างๆ เช่น ขนาดของบ้าน มุมมองทรัพย์สิน ความใกล้เคียงกับถนนสายหลัก และอื่นๆ อีกมากมาย ถูกนำมาใช้ในการประมาณราคาของทรัพย์สิน ซึ่งช่วยให้ทีมพิจารณาสินเชื่อของเราสามารถประเมินมูลค่าอสังหาริมทรัพย์ได้อย่างรวดเร็วและแม่นยำสำหรับลูกค้าที่ต้องการขายบ้านผ่านพอร์ทัลการซื้ออสังหาริมทรัพย์ สำหรับที่ อยู่อาศัย
ทีมงานของเราทำงานอย่างต่อเนื่องเพื่อปรับปรุง HVM โดยวิศวกรรมคุณสมบัติใหม่ ปรับเปลี่ยนสถาปัตยกรรมแบบจำลอง และปรับปรุงคุณภาพข้อมูล คุณสมบัติหนึ่งที่เราเพิ่งรวมไว้ในโมเดลของเราคือฤดูกาล ช่วงเวลาของปีที่คุณตัดสินใจซื้อหรือขายบ้านอาจส่งผลต่อมูลค่าทรัพย์สินของคุณ ขึ้นอยู่กับที่ตั้งของบ้าน ราคามักจะสูงขึ้นในช่วงฤดูใบไม้ผลิและฤดูร้อน และลดลงในช่วงฤดูหนาว แม้ว่าโมเดลเริ่มต้นของเราจะจับลักษณะบางอย่างของฤดูกาลอย่างไร้เดียงสาผ่านคุณลักษณะต่างๆ เช่น ระยะเวลาตั้งแต่บ้านถูกขายครั้งล่าสุด เราต้องการเข้ารหัสลักษณะต่างๆ ของฤดูกาลอย่างชัดเจนลงในโมเดลของเรา
การเข้ารหัสฤดูกาล
ตามปกติแล้ว ราคาประกาศขายบ้านจะขึ้นอยู่กับบ้านที่เพิ่งขายไป บ้านที่เปรียบเทียบได้ใกล้เคียง หรือเปรียบเทียบกัน แม้ว่าผู้ขายที่ลงประกาศขายบ้านอาจไม่ได้วางแผนไว้ว่าจะขายบ้านเมื่อใด แต่ผู้ประเมินราคาหรือตัวแทนอสังหาริมทรัพย์จะพิจารณาปัจจัยตามฤดูกาลในการกำหนดราคาขายบ้านของตน สำหรับโมเดลแมชชีนเลิร์นนิง จะต้องรวมฤดูกาลนี้ไว้ในโมเดลอย่างชัดเจน และสามารถทำได้หลายวิธี
รายเดือน
การเข้ารหัสฤดูกาลตลอดเดือนที่มีเหตุการณ์เกิดขึ้น ลำดับหรือหมวดหมู่ น่าจะเป็นวิธีที่ใช้กันทั่วไปและง่ายที่สุดในการแยกคุณลักษณะตามฤดูกาล ที่ Homebound นี่เป็นเดือนที่มีการประกาศขายอสังหาริมทรัพย์ แม้ว่าวิธีนี้จะนำไปใช้และตีความได้ง่าย แต่วิธีนี้มักขาดสิ่งที่เราต้องการให้โมเดลเข้าใจเกี่ยวกับฤดูกาล ตัวอย่างเช่น หากข้อมูลนี้ถูกเข้ารหัสแบบ one-hot แต่ละเดือนจะถือว่าเป็นอิสระต่อกัน ในขณะที่ในความเป็นจริงแล้ว เราทราบดีว่าความสัมพันธ์ของเวลานั้นมีอยู่จริง หากข้อมูลนี้เป็นเลขลำดับ เราจะพิจารณาความคล้ายคลึงกันระหว่างเดือนต่างๆ เช่น มกราคมและกุมภาพันธ์ ในขณะที่แยกเดือนที่ต่างกันออกไป เช่น มกราคมและมิถุนายน แต่จากนั้นจะพบปัญหาในเดือนมกราคมและธันวาคมโดยแสดงเป็นเดือนที่คล้ายกันน้อยที่สุด
ถัง
อีกวิธีหนึ่งในการแสดงฤดูกาลคือการจัดกลุ่มหรือการจัดกลุ่มเวลาที่อาจเกี่ยวข้องกับผลลัพธ์ที่คาดการณ์ไว้ ตัวอย่างเช่น เราจัดกลุ่มวันที่ในรายการด้วยตนเองเป็นสองวิธีที่อาจเกี่ยวข้องกัน คือ รายไตรมาสและรายฤดูกาล แม้ว่าวิธีนี้จะลดมิติข้อมูลและเข้ารหัสลักษณะต่างๆ ของฤดูกาลที่รับรู้ด้วยตนเอง แต่ปัญหาเดียวกันที่กล่าวถึงข้างต้นยังคงมีอยู่กับการแสดงทั้งแบบหมวดหมู่และแบบลำดับของกลุ่มที่ฝากข้อมูลเหล่านี้
วงจร
แม้ว่าการแสดงเวลาทั้งแบบรายเดือนและแบบฝากข้อมูลจะช่วยตีความและแสดงฤดูกาลเป็นคุณลักษณะของแบบจำลอง แต่ก็ต้องดิ้นรนกับการจับภาพธรรมชาติที่หมุนเวียนของเวลาและฤดูกาล อีกวิธีหนึ่งในการบันทึกวัฏจักรฤดูกาลนี้คือการแปลงวันที่ในหนึ่งปีให้เป็นพื้นที่คุณลักษณะสองมิติ ไซน์และโคไซน์ สิ่งนี้ทำได้โดยการทำให้วันที่เป็นตัวเลขของปีเป็นปกติเป็นค่าระหว่าง 0 ถึง 1 แปลงค่าเหล่านั้นระหว่างช่วงไซน์และโคไซน์ 0 ถึง 2π แล้วรับไซน์และโคไซน์ของค่าเหล่านั้น (นึกย้อนกลับไปที่วงกลมหน่วยจากตรีโกณมิติ ). แต่ละวันในปีนั้นจะแสดงด้วยคู่ค่าไซน์และโคไซน์ที่ไม่ซ้ำกัน ซึ่งสร้างเป็นวงกลมดังที่แสดงในรูปด้านล่าง
ข้อเสียอย่างหนึ่งของวิธีการนี้คือขาดความสามารถในการตีความ การมีสองคุณลักษณะแทนเวลาทำให้ยากต่อการถอดรหัสความสำคัญของคุณลักษณะและผลกระทบทั่วไปที่มีต่อตัวแปรผลลัพธ์ นอกจากนี้ โมเดลบางอย่าง เช่น วิธีการแบบต้นไม้ อาจมีปัญหาในการสร้างการแยกที่มีประโยชน์สำหรับคุณลักษณะสองอย่างที่แสดงถึงองค์ประกอบเดียว นั่นคือ ฤดูกาล ทางออกหนึ่งที่เป็นไปได้สำหรับปัญหานี้คือการสร้างลักษณะวัฏจักรหนึ่งมิติที่คล้ายกันซึ่งตีความเป็น N วันจากช่วงเวลาเฉพาะที่เลือก นี่เทียบเท่ากับการแสดงเวลาโดยเป็นเพียงการแสดงค่าโคไซน์ปกติของเวลาจากด้านบน โดยที่แต่ละวันอยู่ห่างจากวันที่ 1 มกราคมไป N วันจนกระทั่ง N มาบรรจบกันในเดือนกรกฎาคม อย่างไรก็ตาม สิ่งนี้นำไปสู่ช่วงเวลาที่แตกต่างกันสองครั้งของปีซึ่งแสดงด้วยค่าเดียวกัน
ท้ายที่สุด ไม่มีวิธีที่ "ถูกต้อง" ในการเข้ารหัสฤดูกาล แต่ละวิธีมีข้อดีและข้อเสียตามปัญหาที่เกิดขึ้น ความต้องการทางธุรกิจ และรูปแบบที่เลือก ดังนั้น วิธีเดียวที่เราจะสามารถประเมินได้อย่างยุติธรรมว่าวิธีใดดีที่สุดสำหรับ HVM คือผ่านการทดลอง
การประเมินการทดลอง
เพื่อกำหนดวิธีการแสดงฤดูกาลที่ดีที่สุดใน HVM เราทำการทดลองเพื่อกำหนดคุณสมบัติที่ลดข้อผิดพลาดให้เล็กที่สุด ตามที่กำหนดโดย Mean Average Precision Error (MAPE) และท้ายที่สุดให้ความแม่นยำของแบบจำลองที่เพิ่มขึ้นมากที่สุด ที่ Homebound เราใช้mlflowเพื่อติดตามการทดลอง จัดเก็บรายละเอียดโมเดล และประเมินเมตริกหลักในภูมิภาคต่างๆ ตารางด้านล่างประกอบด้วยข้อมูลเกี่ยวกับการดำเนินการทดสอบตามฤดูกาล
เนื่องจากโดยทั่วไปแล้วการเข้ารหัสฟีเจอร์แบบวนรอบจะใช้ในโมเดลที่ไม่ใช่แบบทรี ซึ่งมักจะอยู่ในโมเดลการเรียนรู้เชิงลึก เรารู้สึกประหลาดใจที่เห็นว่ามันช่วยยกระดับประสิทธิภาพของโมเดลได้มากที่สุด HVM เป็นกลุ่มของวิธีการแบบต้นไม้ ดังนั้นเราจึงไม่แน่ใจเกี่ยวกับความสามารถในการรับราคาที่อยู่อาศัยตามฤดูกาลจากพื้นที่คุณลักษณะสองมิติ
หากคุณไม่แน่ใจเกี่ยวกับวิธีการเข้ารหัสตามฤดูกาลสำหรับโครงการของคุณ ลองใช้วิธีเหล่านี้ดู คุณอาจจะแปลกใจกับสิ่งที่ได้ผล!
ขั้นตอนต่อไปและการทำงานในอนาคต
ดังที่ได้กล่าวไว้ก่อนหน้านี้ หนึ่งในเป้าหมายหลักของทีมของเราคือการช่วยทีมพิจารณาสินเชื่อของ Homebound ในการยื่นข้อเสนอที่รวดเร็ว ถูกต้อง และเป็นธรรมให้กับลูกค้าของ Homebound การให้คำอธิบายเพิ่มเติมในการคาดคะเน HVM เป็นวิธีหนึ่งที่เราสามารถปรับปรุงความร่วมมือระหว่างทีมของเรา แม้ว่าการรวมคุณสมบัติแบบวงกลมสองมิติเข้าด้วยกันนั้นยอดเยี่ยมสำหรับการเพิ่มประสิทธิภาพของโมเดล แต่ก็ทำให้การตีความโมเดลลดลงบ้าง
วิธีหนึ่งที่ทีมแมชชีนเลิร์นนิงได้รับข้อมูลเชิงลึกเกี่ยวกับการคาดการณ์แต่ละรายการและผลกระทบของฤดูกาลต่อการทำนายคือผ่านค่าShapley ในอนาคต การให้ความสามารถในการตีความในระดับเดียวกันกับการคาดการณ์ของ HVM สำหรับทีมพิจารณาสินเชื่อสามารถช่วยเราทำซ้ำและปรับปรุงความเข้าใจของเราเกี่ยวกับฤดูกาลของราคาบ้านได้ดีขึ้นในตลาดภูมิภาคต่างๆ และปรับปรุงแบบจำลองของเรา
การใช้งาน Python
ส่วนนี้จะเน้นที่การใช้คุณลักษณะตามฤดูกาลต่างๆ ที่กล่าวถึงข้างต้นเป็นหลักใน Python
เราเริ่มต้นด้วยการนำเข้าแพ็คเกจที่จำเป็นในการสร้าง Pandas DataFrame จำลองที่มีวันที่ในช่วงสามปีที่ผ่านมา (2019–2021) เพื่อแยกคุณลักษณะตามฤดูกาล
# import packages
import pandas as pd
import numpy as np
# create dummy dataframe of dates over the past 3 years (2019-2021)
df = pd.DataFrame()
df['date'] = pd.Series(pd.date_range('2019', periods=1096, freq='D'))
# extract month number for ordinal representation of months
df['month_ordinal'] = df['date'].dt.month
# extract month name for categorical representation of months
df['month_categorical'] = df['date'].dt.month_name()
# extract quarters for bucketed representation of time
# note: the last two characters are removed to keep the quarter without year
df['quarter'] = df['date'].dt.to_period('Q').astype('str').str[-2:]
# create list of desired month number to group mapping
seasons = ['Winter', 'Winter', 'Spring', 'Spring', 'Spring', 'Summer',
'Summer', 'Summer', 'Fall', 'Fall', 'Fall', 'Winter']
# map month number (1-12) to desired group (list created above)
season_month_map = dict(zip(range(1,len(seasons)+1), seasons))
# map extracted month number (month_ordinal) to desired group
df['season'] = df['month_ordinal'].apply(lambda x: season_month_map[x])
# extract day of year from date
df['day_of_year'] = df['date'].dt.dayofyear
# create cyclic sine and cosine normalized representation of time using extracted day of year
# note: divide by 366 to normalize & account for leap years (max number of days in a year)
# note: using just cos_date feature is equivalent to the one-dimnesional feature described
df['sin_date'] = np.sin(2 * np.pi * df['day_of_year']/366)
df['cos_date'] = np.cos(2 * np.pi * df['day_of_year']/366)
Homebound กำลังรับสมัคร! สนใจร่วมงานกับโฮมบาวด์หรือไม่? ตรวจสอบ หน้า อาชีพ ของเรา !
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Homebound โปรดไปที่เว็บไซต์ Homeboundหรือไปที่บล็อกเทคโนโลยี Homeboundเพื่อดูเรื่องราวเพิ่มเติมจากทีมงานของเรา
อ้างอิง
[1] อาราจ, วิกตอเรีย. “ช่วงเวลาที่ดีที่สุดของปีในการซื้อบ้าน” Rocket Mortgage 1 พ.ย. 2565https://www.rocketmortgage.com/learn/best-time-of-year-to-buy-a-house.
[2] เบสซอง ปิแอร์-หลุยส์. “การเข้ารหัสคุณลักษณะตามวัฏจักร ถึงเวลาแล้ว!”, Towards Data Science , 8 มิถุนายน 2020,https://towardsdatascience.com/cyclical-features-encoding-its-about-time-ce23581845ca.
[3] กระโดด “Ai in Travel ตอนที่ 2: ตัวแทนของวัฏจักรและลักษณะทางภูมิศาสตร์” กลาง — Life at Hopper , 27 เม.ย. 2018,https:///life-at-hopper/ai-in-travel-part-2-representing-cyclic-and-geographic-features-4ada33dd0b22.