BOTNOI RODKAIDEE car price prediction

Tanabut Taksinavongskul
botnoi-classroom
Published in
3 min readJul 9, 2020
rod.kaidee.com

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

จากการที่ได้ร่วมเรียนรู้จาก ผู้เชี่ยวชาญและมีประสบการณ์ทางด้าน Data Science อย่าง BOTNOI นี่คือ project เพื่อใช้งานในโลกแห่งข้อมูลของจริง

เริ่มต้นการทำโดยการ ใช้ python ในการ import data และ Exploratory Data Analysis(EDA) ก่อนครับ ลอง sample สุ่มมาดูก่อนสัก 5 ตัวครับตัวตารางข้อมูลจะใช้ชื่อว่า carkaidee

display(carkaidee.sample(5))
display(carkaidee.sample(5))

จากข้อมูลจะเห็นได้ว่าแต่ละ column มีอะไรบ้างดังนี้ครับ:

  • price คือราคารถมือสอง
  • desc คือรายละเอียดของรถมือสองที่ผู้ขายใส่ไว้ มากน้อยต่างกันไป
  • ad_id คือ หมายเลขลำดับที่ลงโฆษณาขายรถเอาไว้ในเว็ปไซต์
  • location คือ จังหวัดของผู้ขายรถ หรือ ทะเบียนรถ
  • timestamp คือเวลาโพสขาย
  • mileage คือ เลขไมล์ที่วิ่งไปของรถที่จะขาย
  • brand คือ ยี่ห้อรถ
  • model คือ ชื่อรุ่นรถ
  • year คือ ปีรถ
  • fuel คือ ประเภทของเชื้อเพลิงที่รถใช้
  • transmission คือ ประเภทเกียร์
  • color คือ สีรถ
  • car_type คือ ประเภทรถ

ในการ prediction นี้ ราคาของรถคือ Label หรือ ค่า y_prediction

Data Cleaning

missing data and data type

อันดับแรกจะทำการ check missing value หรือข้อมูลที่หายไปจากข้อมูลที่เราได้มา

carkaidee.isnull().sum()

carkaidee.isnull.sum()

ทำการแปลง ค่าให้เป็น numeric ใน column ของ mileage แล้วทำการเช็คค่าสถิติทั่วไปของชุดข้อมูลเบื้องต้น

carkaidee[‘mileage’] = pd.to_numeric(carkaidee.mileage, errors = ‘coerce’)

carkaidee.describe().round(3)

carkaidee.describe().round(3)

จากค่าสถิติเบื้องต้น จึงนำมาไปสู่การเช็คให้ง่ายขึ้นด้วยการ plot chart ขึ้นมาให้ตรวจสอบได้ดีขึ้นว่ามี outlier หรือไม่ หรือเรียกว่า Visualization

carkaidee.boxplot()

จาก box plot เห็นได้ว่า timestamp และ ad_id ทำให้ข้อมูลอื่นไม่สามารถ visualize ได้ดี ดังนั้นจะทำการ drop ออกจากข้อมูลหลักก่อนเลย ตัว desc เป็นตัวหนังสืออาจมีประโยชน์ในการใช้ text analysis ซึ่งต้องใช้เรื่อง RegularExpression and NLP มาช่วย ขอตัดไปก่อน

carkaidee = carkaidee.drop([‘desc’,’ad_id’,’timestamp’], axis=1)

ต่อมาจึงนำค่าเฉพาะ price , mileage และ year มาทำ box plot อีกรอบ

carkaidee.boxplot(column=[‘price’, ‘mileage’, ‘year’])

จะเห็น outlier ชัดเจนใน price และ mileage ชัดเจนขึ้น จึงทำการ clean ด้วย

carkaidee = carkaidee[(carkaidee.price > carkaidee.price.quantile(0.001)) & (carkaidee.price < carkaidee.price.quantile(0.96))]’carkaidee.mileage[carkaidee.mileage>500000] = np.nan

ทำให้ price ราคารถที่ outlier เยอะเกินไปไม่กระทบกับข้อมูลโดยรวม และ mileage ที่มากกว่า 500,000 kilometers ตัดออกไปเพราะดูผิดปกติ

หลังจาก นั้นลองดู box plot อีกรอบ ดูการเปลี่ยนแปลงของ price และ mileage

carkaidee.boxplot()

ทำการ fill missing data โดยใช้ mode หรือค่าที่ซ้ำมากที่สุดของในชุด column นั้นๆ

Categorize and add a new feature column

จะทำการจัดกลุ่มข้อมูลเป็นประเภทภายใน column เพื่อลดขนาด(size) ของข้อมูลเอง

ต่อมาเป็นการเพิ่ม car_age ขึ้นมาเพื่อดูอายุรถแทนการดู year ของรถ นั่นเอง

มาดูหน้าตาข้อมูลที่ clean และเพิ่มอายุรถไปแล้วกัน

Extract Feature

โดยใช้ get_dummies เพื่อแปลง ชุดข้อมูลใน column ที่เป็น ประเภท ที่ไม่ใช่ตัวเลขคือ 'location','brand','model', 'color','fuel', 'transmission', 'car_type' ให้เป็น categorical ให้หมดจึงจะนำเข้าไปใช้ train ใน model ของเราได้

get_dummies()

Train Model

เริ่มทำการแยก label และ feature ของข้อมูลออกก่อน

ต่อมาทำการ แบ่ง เป็น train set และ test set โดยใช้

ในครั้งนี้เลือก Random forest regression model เพื่อทำการ train ก่อน

Evaluation (Regression)

ทำการประเมินผลของ model ที่เราทำการ train เรียบร้อยแล้วโดยการใช้ .score จะบอกถึงค่า R2

วัดผลด้วยค่า MSE: Mean square error

อีกค่าที่ใช้กันคือ RMSE: Root mean square error

--

--

Tanabut Taksinavongskul
botnoi-classroom

Data Journey : Self developing and learning on new technology about AI, automation and data related.