สำหรับ Data Scientist หรือชาว Kaggle ที่ต้องสร้าง Model เพื่อทำนายผลกันอยู่บ่อย ๆ เป็นที่ทราบกันดีกว่าขั้นตอนการทำ “Feature Engineering” เป็นขั้นตอนชี้เป็นชี้ตายเลยว่า Model ของเราจะออกมาดีแค่ไหน
วันนี้แอดมินไปเจอ Library เด็ด ๆ ของ Python ที่ช่วยในการทำขั้นตอนนี้ให้ง่ายขึ้น เลยเอามาแนะนำกันครับ
ช่องว่างที่หายไปใน Data Science บน Python: Pandas + _________ + Scikit-learn
การสร้างโมเดล Data Science ขึ้นมาใช้สักโมเดล เราต้องเริ่มจากการทำความสะอาดข้อมูล (Data Cleaning & Wrangling) ซึ่ง Pandas ใน Python ก็เก่งมาก ๆ เรื่องนี้
นอกจากนี้เวลาสร้างโมเดล เราก็มี Scikit-learn ที่รวบรวม Algorithms สำหรับทำ Machine Learning หลากหลายรูปแบบให้เราเรียกใช้ได้ง่าย ๆ เลย
แต่เราไม่สามารถนำข้อมูลที่ Clean เสร็จแล้ว โยนใส่ Model ทันทีเลยได้ ต้องมีการคัดเลือกเฉพาะฟีเจอร์ที่ดี ๆ เพื่อให้ Model ของเราออกมามีประสิทธิภาพดีที่สุด ซึ่ง Library ที่แอดเอามาแนะนำในวันนี้ จะช่วยในส่วนนี้นั่นเองครับ
FeatureTools: Library สำหรับทำ Feature Engineering แบบออโต้
Library ตัวนี้มีชื่อว่า FeatureTools ซึ่งเป็น Library ที่ Open Source โดยบริษัทที่ทำ Data Science ให้กับ Nasa, MIT, SAP ฯลฯ ชื่อ Feature Labs ครับ
เบื้องหลังของ Python Library ตัวนี้ เค้าใช้สิ่งที่เรียกว่า DFS (Deep Feature Analysis ซึ่งไม่เกี่ยวอะไรกับ Deep Learning นะครับ ชื่อคล้ายกันเฉย ๆ) ซึ่งพัฒนาโดยแล็บ Computer Science and Artificial Intelligence ที่ MIT
คิดว่าหลาย ๆ คนน่าจะสงสัยว่ามัน Automate Feature Engineering ได้ยังไง เดี๋ยวแอดจะอธิบายให้ฟังคร่าว ๆ ว่า DFS มันทำงานยังไงนะครับ…
ปกติแล้ว เวลาเราจะทำ Feature Engineering จะต้องมานั่งไล่ดูข้อมูลทั้งหมดว่ามีฟีเจอร์อะไรบ้าง แล้วทดลองสร้างฟีเจอร์ใหม่จากข้อมูลที่เรามี ซึ่งพอเราทำบ่อย ๆ เข้าก็จะเริ่มชำนาญ เริ่มรู้ว่าควรจะฟีเจอร์ไหนมาทำยังไงให้ได้ฟีเจอร์ที่ดี
เจ้าตัว DFS ก็ใช้หลักการเดียวกันนี่แหละ โดยมันจะอ่านจาก Relationship ที่เราบอกมันเป็น input เข้าไปในระบบ แล้วจะทำการเลือกคำสั่งคณิตศาสตร์ที่เหมาะกับข้อมูลนั้น ๆ มาให้ เช่น ค่าเฉลี่ย (Mean), ค่าสูงสุด (Max), ค่ารวม (Sum) ฯลฯ
ตัวอย่างการทำงานของ FeatureTools
ลองดูตัวอย่างตามรูปด้านล่างนะครับ น่าจะเห็นภาพมากขึ้น
จากรูป จะเห็นว่าเรามีข้อมูลใน Table ชื่อ Purchases ว่าลูกค้าคนไหนซื้อของกับเรากี่ครั้ง ครั้งละกี่บาท พอเราเอาข้อมูลนี้มาโยนใส่ใน DFS มันก็ทำการสร้างฟีเจอร์ใหม่ให้เรา (คอลัมน์เขียว) โดยรวบรวมการซื้อสินค้าทั้งหมดของลูกค้าคนนั้น มาสร้างเป็น “จำนวนเงินรวมที่ลูกค้าซื้อสินค้ากับเรา”
นอกจากนั้น ถ้าเรามี Table ที่ซับซ้อน DFS ก็ยังสามารถสร้างฟีเจอร์ให้กับเราได้
จากรูปด้านบน คอลัมน์เขียว คือ ฟีเจอร์ที่สร้างโดย DFS นั่นเองครับ ถ้าเราดูจากล่างขึ้นบนจะเห็นว่า:
- เริ่มแรก DFS สร้างฟีเจอร์การรวม (SUM) ยอดซื้อของแต่ละออเดอร์ จาก Table “Order Products” ไปใส่ใน Table “Orders”
- หลังจากนั้นก็ทำการสร้างฟีเจอร์ที่บอกว่าลูกค้าแต่ละคนมียอดซื้อสูงสุดเท่าไหร่ โดยใช้คำสั่ง MAX กับฟีเจอร์ที่เพิ่งสร้างขึ้นมาตอนแรก
จะเห็นว่าตัว DFS ฉลาดมากเลยทีเดียว อย่างไรก็ตาม แอดลองไปดูวิธีใช้มาแล้ว เราต้องเป็นคนบอก Relationship ของ Table ต่าง ๆ ให้มันนะครับ ไม่ฉะนั้นมันจะสร้างฟีเจอร์มาให้เราไม่ได้
ความสามารถของตัว DFS เค้ามีการทดสอบมาแล้วว่าเก่งจริง โดยการนำไปใช้สร้าง “Data Science Machine” เป็นบอทคล้าย ๆ AlphaGo แต่สำหรับแข่งแก้โจทย์ Data Science ซึ่งลงแข่งแล้วชนะ 615 ทีมที่เป็นคนจริง จากทั้งหมด 906 ทีม!
ข้อจำกัดของ FeatureTools: Library นี้จะเก่งกับข้อมูลที่เป็น Transaction, Relational Database เท่านั้น (ซึ่งก็คือข้อมูลแบบตาราง Excel ปกติที่บริษัทส่วนใหญ่ใช้กันนั่นแหละ) แต่จะไม่เก่งกับพวกข้อมูลรูปภาพ หรือเสียง ซึ่งอันนั้นเค้าบอกยกให้เป็นหน้าที่ของ Deep Learning ไปครับ
มาใช้ FeatureTools กันเถอะ
ถ้าสนใจลองใช้ FeatureTools มาสร้างโมเดลกันแล้ว สามารถคลิกลิงค์ด้านล่างเพื่ออ่านเพิ่มเติมได้เลยครับ และไม่ว่าคุณจะใช้ Python 2 หรือ 3 ก็สามารถใช้ FeatureTools ได้ครับ
วิธีติดตั้งและใช้งาน FeatureTools – https://docs.featuretools.com/
ตัวอย่างโค้ดการใช้งาน FeatureTools – https://www.featuretools.com/demos
บทความอธิบายการทำงานของ Deep Feature Analysis – https://www.featurelabs.com/blog/deep-feature-synthesis/
หวังว่าจะมีประโยชน์กับทุกท่านไม่ว่าจะนำไปสร้าง Model ใช้ในองค์กร หรือนำไปใช้แข่ง Datathon นะครับ ถือเป็นเครื่องมือที่ช่วยให้เราทำงานได้เร็วขึ้นมากเลยทีเดียวครับ