PyCaret เครื่องมือช่วยวิเคราะห์ข้อมูล (1/3)

Thanakorn Thaminkaew
4 min readMay 15, 2022

--

PyCaret คืออะไร?

PyCaret คือไลบรารีโอเพนซอร์ส (ใช้งานได้ฟรี) ในภาษา Python ที่ช่วยให้การวิเคราะห์ข้อมูลด้วยเทคนิคการเรียนรู้ด้วยเครื่อง (machine learning) ตั้งแต่การเตรียมข้อมูลตลอดจนการนำโมเดลที่พัฒนาไปใช้งานจริง (end-to-end) ด้วยการเขียนโค้ดเพียงไม่กี่บรรทัด ทำให้ผู้ใช้งานประหยัดเวลามากขึ้นเมื่อเทียบกับการใช้ไลบรารีอื่นในการแก้ไขปัญหาเดียวกัน

PyCaret ถูกริเริ่มเมื่อปี 2019 โดยคุณ Moez Ali นักวิทยาศาสตร์ข้อมูลชาวปากีสถาน ที่มีความต้องการช่วยให้บุคคลทั่วไปสามารถวิเคราะห์ข้อมูลเชิงลึกด้วยตัวเองได้ง่ายขึ้น ซึ่งไลบรารีนี้มีแรงบัลดาลใจ (แต่ไม่ได้เกี่ยวข้อง) มาจากแพคเกจ caret ในภาษา R ซึ่งถูกสร้างโดย Dr. Max Kuhn เพื่อช่วยให้การจัดการข้อมูลและการวิเคราะห์ข้อมูลในภาษา R ให้มีความซับซ้อนน้อยลงและเข้าถึงคนทั่วไปได้ง่าย สำหรับบทสัมภาษณ์สามารถอ่านเพิ่มเติมได้ ที่นี่

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

หลักการทำงานเบื้องต้น

PyCaret ถูกพัฒนาด้วยการเปลี่ยนแปลงพฤติกรรมการทำงานของฟังก์ชั่นหรือคลาส (wrapper) ของไลบรารีที่ถูกใช้บ่อยในการวิเคราะห์ข้อมูล ไม่ว่าจะเป็น scikit-learn (ไลบรารีจัดการและวิเคราะห์ข้อมูลด้วยเทคนิคการเรียนรู้ด้วยเครื่องยอดนิยม) XGBoost (ไลบรารีการวิเคราะห์ต้นไม้การตัดสินใจด้วยเทคนิคการเรียนรู้แบบมีผู้เรียนหลายคน) spaCy (ไลบรารีการประมวลผลภาษาธรรมชาติ) Hyperopt (ไลบรารีการปรับหาค่าพารามิเตอร์ให้เหมาะสม) และ Ray (ไลบรารีการประมวลผลแบบขนาน) ทำให้คำสั่งการวิเคราะห์ข้อมูลด้วย PyCaret สั้นและเข้าใจง่ายมากกว่าการใช้งานโดยตรงจากไลบรารีหลักเหล่านั้น แต่ยังคงถึงแนวคิดการวิเคราะห์ของไลบรารีหลัก ทำให้ในอนาคต ผู้ใช้งานสามารถเปลี่ยนไปใช้ไลบรารีหลักโดยตรงได้ไม่ยาก

คุณสมบัติเบื้องต้น

คุณสมบัติของ PyCaret แบ่งออกเป็น 6 หัวข้อ ซึ่งผมขอเรียงลำดับตามการเรียกใช้งานตามหลักการทำงานของโปรเจควิเคราะห์ข้อมูล ดังนี้

  1. Data preparation (จัดเตรียมข้อมูล)
  2. Model training (ออกแบบการเรียนรู้และพัฒนาโมเดล)
  3. Hyperparameter tuning (ปรับหาค่าพารามิเตอร์ให้เหมาะสมกับโมเดล)
  4. Analysis and interpretability (วิเคราะห์และแปรผลลัพธ์จากโมเดล)
  5. Model selection (เลือกโมเดลที่เหมาะสมที่สุด)
  6. Experiment logging (บันทึกการทดลองของโมเดล)
ที่มา https://towardsdatascience.com/easy-mlops-with-pycaret-mlflow-7fbcbf1e38c6

โดยที่ PyCaret มีโมดูลของเทคนิคการเรียนรู้ด้วยเครื่อง ทั้งหมด 7 โมดูล และแบ่งออกเป็น 2 ประเภท ดังนี้

ที่มา https://towardsdatascience.com/easy-mlops-with-pycaret-mlflow-7fbcbf1e38c6

Supervised Learning คือการพัฒนาโมเดลด้วยข้อมูลที่มีการระบุประเภท ซึ่งข้อมูลจะมีทั้งคำถามและคำตอบ ซึ่ง PyCaret มีโมดูลให้เลือก 3 โมดูล ได้แก่ การจำแนกประเภท (classification) และการแก้สมการถดถอย (regression) โดยที่การแก้โจทย์อนุกรมเวลา (time series) อยู่ในระหว่างการพัฒนา สำหรับรายละเอียดการเขียนโค้ดของ supervised learning ด้วย PyCaret จะมีกระบวนการคร่าว ๆ ตามรูปด้านล่าง

ที่มา https://github.com/pycaret/pycaret

Unsupervised Learning คือการพัฒนาโมเดลด้วยข้อมูลที่ไม่ได้มีการระบุประเภท ซึ่งข้อมูลจะมีแต่คำถามและให้โมเดลหาคำตอบเอง ซึ่ง PyCaret มีโมดูลให้เลือก 4 โมดูล ได้แก่ การจัดกลุ่ม (clsutering) การตรวจจับความผิดปกติ (anomaly detection) การแก้โจทย์กฎความสัมพันธ์ (association rule mining) และการประมวลผลทางภาษา (natural language processing) สำหรับรายละเอียดการเขียนโค้ดของ unsupervised learning ด้วย PyCaret จะมีกระบวนการคร่าว ๆ ตามรูปด้านล่าง

ที่มา https://github.com/pycaret/pycaret

กรณีศึกษาที่ถูกนำไปใช้งานจริง

ที่มา https://towardsdatascience.com/easy-mlops-with-pycaret-mlflow-7fbcbf1e38c6

ในปัจจุบัน กระบวนการวิเคราะห์ข้อมูลของนักวิเคราะห์ข้อมูลในการทำงานจริง (machine learning life cycle) สามารถแบ่งออกเป็น 6 ขั้นตอนหลัก ๆ โดยที่ PyCaret มีส่วนช่วยให้การทำงานในกล่องสีส้มทำงานได้มีประสิทธิภาพและรวดเร็วมากขึ้น สำหรับรายละเอียดของแต่ละขั้นตอน มีดังนี้

  1. Business Problem: ผู้วิเคราะห์ข้อมูลพูดคุยกับผู้เชี่ยวชาญในด้านที่เกี่ยวข้องกับโจทย์ปัญหาตั้งต้นเพื่อทำความเข้าใจปัญหา ทำการสัมภาษณ์ผู้มีส่วนได้ส่วนเสียหลัก รวบรวมข้อมูล และกำหนดความคาดหวังรวมไปถึงเป้าหมายโดยรวมของโครงการ ซึ่งส่วนนี้อาจใช้เวลาสองสามวันถึงเป็นสัปดาห์จึงจะเสร็จสมบูรณ์ ขึ้นอยู่กับกรณีการใช้งาน จำนวนผู้มีส่วนได้ส่วนเสียกับงานดังกล่าว และความซับซ้อนของโจทย์ปัญหา
  2. Data Sourcing & ETL: เมื่อเข้าใจปัญหาแล้ว ผู้วิเคราะห์ข้อมูลจะนำข้อมูลที่ได้รับระหว่างการสัมภาษณ์กับกลุ่มเป้าหมาย ข้อมูลจากฐานข้อมูลขององค์กร ข้อมูลที่เก็บข้อมูลจากแหล่งข้อมูลอื่น มาจัดให้อยู่ในรูปแบบมีเหมือนกัน และทำการรวมข้อมูลจากหลายแหล่งเข้าด้วยกัน เพื่อให้ง่ายต่อการวิเคราะห์ข้อมูลในขั้นตอนถัดไป
  3. Exploratory Data Analysis (EDA): ขั้นตอนนี้จะทำการสำรวจข้อมูลและประเมินคุณภาพของข้อมูล ตรวจสอบค่าที่หายไป การกระจายคุณลักษณะ และความสัมพันธ์ระหว่างตัวแปร เพื่อตัดสินใจว่า ข้อมูลดังกล่าวเพียงพอหรือไม่ และมีข้อควรระหว่างอื่นหรือไม่ ซึ่งจะมีประโยชน์ในการพัฒนาโมเดลในขั้นถัดไป
  4. Data Preparation: PyCaret มีส่วนช่วยเหลือในการเตรียมข้อมูลเพื่อสร้างโมเดล ไม่ว่าจะเป็น การแบ่งข้อมูลออกเป็นข้อมูลสำหรับการพัฒนาโมเดล (training data) และข้อมูลสำหรับการทดสอบโมเดล (testing data) การป้อนค่าที่ขาดหายไป การปรับรูปแบบของข้อมูลให้เหมาะสมกับการพัฒนาโมเดล
  5. Model Training & Selection: PyCaret จะนำข้อมูลที่ได้รับจากขึ้นตอนก่อนหน้า มาทำการทดลองในแต่ละโมเดล การปรับไฮเปอร์พารามิเตอร์ การประเมินการวัดประสิทธิภาพ เช่น ค่าความแม่นยำ (accuracy), พื้นที่ใต้กราฟ (AUC), ค่าความคลาดเคลื่อน (residuals) เป็นต้น การวิเคราะห์แบบจำลองด้วยแผนภูมิ และสุดท้ายทำการเลือกโมเดลที่ดีที่สุด
  6. Deployment & Monitoring: ขั้นตอนนี้ส่วนใหญ่เกี่ยวกับกระบวนการที่เกี่ยวข้องกับการดำเนินการและจัดการโมเดล (MLOps) ซึ่งมีหลากหลายวิธีตามลักษณะของทรัพยากรถูกจัดเตรียมไว้ให้ อาทิ การพัฒนาและรวมโค้ดให้อยู่ในรูปแบบเดียวกันเพื่อให้ง่ายต่อการติดตั้ง การสร้าง container image เพื่อให้ง่ายต่อการติดตั้งในเครื่องปลายทาง การทดสอบคุณภาพโค้ตและประสิทธิภาพการใช้งาน การสร้าง API ที่สามารถใช้เพื่อรับการคาดการณ์เกี่ยวกับข้อมูลใหม่ได้โดยอัตโนมัติ

จากกระบวนการทั้งหมดนี้ หากเขียนโค้ดโดยใช้ไลบรารีหนึ่งตัวต่อหนึ่งข้อ ผู้ใช้งานจำเป็นต้องมีไลบรารีที่เกี่ยวข้องมากมาย ส่งผลให้โค้ดที่เขียนยาวและยุ่งยากในการแก้ไขในอนาคต

ที่มา https://pycaret.gitbook.io/docs/learn-pycaret/faqs

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

Business Problem: ในตัวอย่างนี้ ผมเลือกปัญหาจากการศึกษารายกรณีของ Darden School of Business ที่ชื่อว่า “Sarah Gets a Diamond” ซึ่งเป็นเรื่องราวของ Greg ที่ต้องการซื้อแหวนสำหรับการขอแต่งงาน Sarah โดยที่ Greg ต้องการวิเคราะห์ราคาของเพชร 6000 ชิ้นที่มีราคาขายต่ำกว่าราคาที่แท้จริง ออกมาเป็นโมเดลการทำนาย โดยใช้ลักษณะของเพชรแต่ละชิ้น

Data Sourcing & ETL: ข้อมูลนี้สามารถนำเข้าได้จาก PyCaret โดยตรงผ่านโค้ดด้านล่างนี้ โดยที่ข้อมูลมีความครบถ้วนและเพียงพอในการวิเคราะห์เบื้องต้นอยู่แล้ว ทำให้ไม่ต้องทำความสะอาดข้อมูลเพิ่มเติม

from pycaret.datasets import get_datadata = get_data(‘diamond’)

Exploratory Data Analysis (EDA): ด้วยไลบราลีเพิ่มเติม plotly.express สามารถทำการสร้างแผนภูมิของความสัมพันธ์ระหว่างตัวแปรอื่นเมื่อเทียบกับราคาเพชรได้ ดังนี้

import plotly.express as pxfig = px.scatter(x=data[‘Carat Weight’], y=data[‘Price’], facet_col = data[‘Cut’], opacity = 0.25, template = ‘plotly_dark’, trendline=’ols’, trendline_color_override = ‘red’, title = ‘SARAH GETS A DIAMOND — A CASE STUDY’)fig.show()

Data Preparation: PyCaret จัดการทำความสะอาดข้อมูลผ่านคำสั่ง setup() โดยที่ไลบรารี่ มีตัวเลือกในการทำความสะอาดข้อมูลมากมายและสามารถศึกษาเพิ่มเติมได้ ที่นี่ สำหรับตัวอย่างนี้ ท่านสามารถใช้คำสั่งด้านล่าง

from pycaret.regression import *prep_data= setup(data, target = ‘Price’, transform_target = True, log_experiment = True, experiment_name = ‘diamond’)

Model Training & Selection: PyCaret นำข้อมูลก่อนหน้าไปทดสอบกับโมเดลที่เกี่ยวข้องและสรุปการวัดผลออกมาเป็นตารางด้านล่าง

best_model = compare_models()

จากนั้น ท่านสามารถเลือกโมเดลที่ดีที่สุดและบันทึกโมเดลดังกล่าวสำหรับการใช้งานจริงด้วยคำสั่งด้านล่าง

save_model(best_model, ‘diamond-pipeline’)

Deployment & Monitoring: PyCaret ได้ทำการเชื่อมต่อกับ MLflow (เป็นเครื่องมือสนับสนุนการนำโมเดลที่พัฒนานำไปใช้จริง มีความสามารถในการบันทึกค่าความแม่นยำในการพัฒนาโมเดลแต่ละครั้งและการบันทึกการพัฒนาโมเดลเพื่อเรียกใช้ในอนาคต) ซึ่งท่านสามารถเข้าไปดูข้อมูลการพัฒนาโมเดลทั้งหมดได้ด้วยคำสั่ง

!mlflow ui

จากนั้นเข้าไปที่ https://localhost:5000 ซึ่งจะขึ้นหน้า MLflow มาคล้ายกับตัวอย่างด้านล่าง

ที่มา https://towardsdatascience.com/easy-mlops-with-pycaret-mlflow-7fbcbf1e38c6

จบไปแล้วนะครับสำหรับบทความแนะนำ PyCaret ในตอนที่ 1 สำหรับบทความตอนที่ 2 จะแสดงตัวอย่างการติดตั้งและทดลองใช้งานไลบรารีเพื่อวิเคราะห์ข้อมูลในหลายกรณี (ที่นี่) และจะปิดท้ายด้วยการทำการเปรียบเทียบ PyCaret กับ scikit-learn ซึ่งเป็นอีกหนึ่งไลบรารีช่วยวิเคราะห์ข้อมูลด้วยเทคนิคการเรียนรู้ด้วยเครื่องที่คล้ายคลึงกัน (ที่นี่)

#machinelearning #datascience #datasciencearchitecture #pycaret #วิศวะคอมฯจุฬาฯ #cpengchula

แหล่งอ้างอิง

Ali, Moez. 2021. “Easy MLOps with PyCaret + MLflow.” Medium. April 28, 2021. https://towardsdatascience.com/easy-mlops-with-pycaret-mlflow-7fbcbf1e38c6.

“GitHub — Pycaret/Pycaret: An Open-Source, Low-Code Machine Learning Library in Python.” n.d. GitHub. https://github.com/pycaret/pycaret.

“Hyperopt Documentation.” n.d. Hyperopt.github.io. http://hyperopt.github.io/hyperopt/.

Kuhn, Max. n.d. The Caret Package. Topepo.github.io. http://topepo.github.io/caret/index.html.

Lounge, Co-learning. 2021. “PyCaret -Why You Don’t Need to Be an Engineer to Be a Data Scientist | Moez Ali.” Co-Learning Lounge. October 1, 2021. https://medium.com/co-learning-lounge/pycaret-regression-normalization-powerbi-classification-clustering-7244fce41b76.

“MLflow — a Platform for the Machine Learning Lifecycle.” n.d. MLflow. https://mlflow.org/.

“Ray — Scaling Python Made Simple, for Any Workload.” n.d. Ray. https://www.ray.io/.

scikit-learn. 2019. “Scikit-Learn: Machine Learning in Python — Scikit-Learn 0.20.3 Documentation.” Scikit-Learn.org. 2019. https://scikit-learn.org/stable/.

“SpaCy · Industrial-Strength Natural Language Processing in Python.” 2015. SpaCy. 2015. https://spacy.io/.

“Welcome to PyCaret — PyCaret Official.” 2020. Gitbook.io. 2020. https://pycaret.gitbook.io/docs/.

“XGBoost Documentation — Xgboost 1.5.1 Documentation.” n.d. Xgboost.readthedocs.io. https://xgboost.readthedocs.io/en/stable/.

--

--