Logistic Regression ด้วย Microsoft Excel
หนึ่งในโจทย์ด้านวิทยาศาสตร์ข้อมูลที่สำคัญคือการทำนายประเภทจากข้อมูลหรือที่เรารู้จักกันในชื่อของ Classification Model ตัวอย่างโจทย์หนึ่งขององค์กรทางภาครัฐ เช่น การจำแนกแนวโน้มการออมเงินเพิ่มของสมาชิกกองทุนบำเหน็จบำนาญข้าราชการ ซึ่งมีเป้าประสงค์เพื่อการจัดจำแนกสมาชิกคนหนึ่ง ๆ ว่ามีความเป็นไปได้ว่าจะออมเงินเพิ่ม หรือไม่ออมเงินเพิ่ม มากกว่ากัน โดยอาศัยข้อมูล เช่น ข้อมูลเชิงประชากร, ข้อมูลเชิงภูมิศาสตร์, ข้อมูลเชิงจิตนิสัย หรือข้อมูลเชิงพฤติกรรม เป็นต้น
ลักษณะสำคัญของโจทย์การจัดหมวดหมู่ (Classification) คือการพยายามจัดคน สิ่งของ หรือวัตถุใด ๆ ให้เข้ากับหมวดหมู่มาตรฐานที่รู้จักอยู่แล้ว
การจัดหมวดหมู่ที่เราอาจนึกถึงเป็นอันดับแรกคือการจัดของออกเป็นสองกลุ่ม เช่น พิจารณาจัดหมวดหมู่ที่เข้าเกณฑ์และไม่เข้าเกณฑ์ กลุ่มที่ใช่และกลุ่มที่ไม่ใช่ ในกลุ่มและนอกกลุ่ม เป็นต้น ลักษณะเช่นนี้เรียกว่าการจัดจำแนกแบบไบนารี (Binary Classification) ซึ่งหากการจำแนกประเภทดังกล่าวมีการกำหนดหลักเกณฑ์เอาไว้ชัดเจน การพิจารณาว่าของชิ้นหนึ่งจะเข้ากลุ่มใดสามารถทำได้ง่ายผ่านการพิจารณาว่าของชิ้นนั้นเข้าเกณฑ์หรือไม่ (Rule-based Classification) อย่างไรก็ดี หากการจัดเข้ากลุ่มใดกลุ่มหนึ่งไม่มีการกำหนดกฎเกณฑ์ที่ชัดเจน อาจจำเป็นต้องใช้เทคนิคของการเรียนรู้ของเครื่อง (Machine Learning) เข้ามาใช้ช่วยพิจารณาว่าของชิ้นนั้น มีแนวโน้มที่จะเข้ากลุ่มใดมากกว่ากัน ซึ่งเทคนิคดังกล่าวจำเป็นต้องอาศัยความแตกต่างกันของข้อมูลระหว่างสองกลุ่มที่กำลังพิจารณา

การพัฒนาโมเดลโดยใช้เทคนิคการเรียนรู้ของเครื่องนี้ คนที่มีความรู้ด้านการเขียนโปรแกรมภาษาคอมพิวเตอร์ เช่น Python, R, MATLAB ฯลฯ อาจพัฒนาโมเดลผ่านการเขียนโปรแกรมด้วยภาษาที่ตนถนัด อย่างไรก็ดี ในบทความนี้จะมานำเสนอการทำโมเดลโดยใช้เครื่องมือง่าย ๆ ที่หลายคนมีอยู่ติดเครื่องคอมพิวเตอร์อยู่แล้ว นั่นก็คือโปรแกรม Microsoft Excel นั่นเอง โดยที่ไม่จำเป็นต้องใช้ความรู้การเขียนโปรแกรมที่ซับซ้อนแต่อย่างใด
คณิตศาสตร์ของการวิเคราะห์การถดถอยโลจิสติก
เทคนิคพื้นฐานหนึ่งที่ใช้ในการจัดหมวดหมู่ได้แก่เทคนิคการวิเคราะห์การถดถอยโลจิสติก (Logistic Regression) ซึ่งเป็นการพยายามฟิตเส้นโค้งซิกมอยด์ (Sigmoid Curve) ให้เข้ากับข้อมูลจริงมากที่สุดเท่าที่ทำได้ในหลักการที่คล้ายกับการวิเคราะห์การถดถอยเชิงเส้น (Linear Regression) ซึ่งเป็นการพยายามฟิตสมการเส้นตรงเข้ากับข้อมูลจริง สิ่งที่แตกต่างคือข้อมูลที่ทำนายจากการทำ Logistic Regression นั้นเป็นการทำนายระหว่างค่า 1 (ในเกณฑ์) และ ค่า 0 (นอกเกณฑ์) ในขณะที่การทำนายจากการทำ Linear Regression นั้นค่าที่ได้จากการทำนายอาจเป็นค่าตัวเลขใด ๆ ก็ได้
เพื่อให้ผลจากการทำนายโดย Logistic Regression มีค่าเป็น 0 หรือ 1 เท่านั้น ตัวแปรที่ส่งผลต่อการทำนายจะถูกคำนวณให้กลายเป็นค่าความน่าจะเป็น (Probability) ว่าค่านั้น ๆ มีความเป็นไปได้ที่จะเป็น 1 เท่าใด โดยสมการดังกล่าวสามารถเขียนได้ในรูปของ
เมื่อ คือเซ็ตของตัวแปรที่ส่งผลต่อการทำนาย,
คือเซ็ตของพารามิเตอร์ของโมเดลทำนาย,
เป็นฟังก์ชันเชิงเส้นในรูปของ
และ
คือค่าความน่าจะเป็นที่ค่าตัวแปรนั้นจะถูกทำนายให้เป็น 1
ในขณะที่ผลจากการทำนายด้วย Linear Regression สามารถเขียนแทนได้ด้วยเส้นตรง (สำหรับกรณีทำนายผลจากหนึ่งตัวแปร) ผลรวมระยะห่างระหว่างค่าทำนายกับค่าของข้อมูลจริงบ่งชี้ความแม่นยำของการทำนายดังกล่าว เพื่อหาเส้นตรงที่เหมาะสม เราอาจสร้างเส้นตรงหลาย ๆ เส้นก่อนจะเฟ้นหาเส้นตรงที่ให้ผลรวมระยะห่างที่ต่ำที่สุด ซึ่งจะถือเป็นโมเดลที่ดีที่สุดที่ใช้อธิบายข้อมูลชุดนั้น ๆ

อย่างไรก็ดีเมื่อใช้หลักการดังกล่าวกับการทำนายด้วย Logistic Regression พบว่าค่าผลรวมที่ได้จากการเทียบระยะห่างระหว่างเส้นโค้งซิกมอยด์กับข้อมูลจริงสามารถหาจุดที่ต่ำที่สุดได้ยาก ในทางปฏิบัติเราจะคำนวณหาค่าผลคูณความน่าจะเป็น ซึ่งสะท้อนความศักยภาพของโมเดลในการฟิตเข้ากับตัวข้อมูล (Likelihood) แทนผลรวมระยะห่าง โมเดลเส้นโค้งซิกมอยด์ที่ให้ค่าความเป็นไปได้สูงสุด (Maximum Likelihood) จะถูกเลือกให้เป็นโมเดลที่ดีที่สุดที่ใช้อธิบายข้อมูลชุดนั้น ในทางปฏิบัติเรานิยมคำนวณค่าล็อกการิธึมของผลคูณความน่าจะเป็น (Log Likelihood) โดยสมการผลคูณความน่าจะเป็นจะถูกเปลี่ยนให้อยู่ในรูปของผลรวม ซึ่งสามารถคำนวณหาค่าสูงสุดผ่านการหาอนุพันธ์ (Differentiation) ได้ง่ายกว่าการหาอนุพันธ์ของผลคูณ ผลบวกดังกล่าวอยู่ในรูปของ
แทน โดยพจน์แรกว่าด้วยความเป็นไปได้ที่จุด ใด ๆ ที่ทราบมาก่อน (labelled) ว่าเป็น 1 นั้น จะถูกโมเดลทำนายว่าเป็น 1 ในขณะที่พจน์ที่สองว่าด้วยความเป็นไปได้ที่จุด
ใดๆ ที่ทราบมาก่อนว่าเป็น 0 นั้นจะถูกโมเดลทำนายว่าเป็น 0 ด้วยเหตุนี้ผลรวมของสองพจน์จึงเป็นผลรวมความเป็นไปได้สำหรับกรณีที่โมเดลทายถูก (1 หรือ 0) ทั้งหมด โมเดลที่มีค่า
ที่สร้างความเป็นไปได้ที่สูงที่สุด (Maximum Likelihood) จึงถูกเลือกให้เป็นโมเดลที่เป็นตัวแทนของข้อมูลชุดนั้น

เตรียมโปรแกรมและข้อมูลให้พร้อมสำหรับการทำ Logistic Regression
เพื่อจะให้โปรแกรม Microsoft Excel สามารถช่วยหาค่าเหมาะสมที่สุด (Optimization) ให้กับการคำนวณของเรานั้น ผู้ใช้จำเป็นต้องเปิดโหมด Solver ของโปรแกรมก่อน โดยไปที่แถบ File > Options > Add-ins จากนั้นเลื่อนไปที่ช่อง Manage เพื่อเลือก Excel Add-ins คลิก Go… ซึ่งจะเปิดหน้าต่าง Add-ins ขึ้นมา คลิกเลือก Solver Add-in กด OK แล้วรีสตาร์ตโปรแกรม หลังจากนั้นจะปรากฏคำสั่ง Solver ในหมวด Analyze ภายใต้แถบ Data


เมื่อเตรียมโปรแกรมเรียบร้อยแล้ว ขั้นตอนต่อไปอาจเป็นการเตรียมข้อมูล ในกรณีของ Tutorial นี้ผู้เขียนขอเลือกใช้ชุดข้อมูลผู้รอดชีวิตจากไททานิก โดยเลือกใช้ข้อมูล train.csv โดยเลือกเฉพาะตัวแปรที่เป็นตัวเลข (Numerical Data) โดยสรุปคอลัมน์ที่เลือกใช้ดังแสดงในตารางด้านล่าง
ชื่อตัวแปร | ความหมาย | คีย์ |
---|---|---|
PassengerId | เลขประจำตัวผู้โดยสาร | |
Survived | รอดชีวิต | 0 = No, 1 = Yes |
Pclass | ชั้นของตั๋ว | 1 = 1st, 2 = 2nd, 3 = 3rd |
Age | อายุในหน่วยปี | |
SibSp | จำนวนพี่น้อง/คู่สมรสที่ร่วมเดินทางบนเรือ | |
Parch | จำนวนบิดามารดา/บุตรที่ร่วมเดินทางบนเรือ | |
Fare | ค่าโดยสาร |
ตัวแปร PassengerId จะถูกใช้เป็น primary key สำหรับระบุตัวบุคคล ตัวแปร Survived จะเป็นตัวแปรที่เป็นเลเบลของข้อมูล ในขณะที่ตัวแปรอื่นจะถูกใช้เป็นตัวแปรอิสระ (Independent Variables) สำหรับการเทรนโมเดล ทั้งนี้ผู้เขียนได้ตัดแถวที่ไม่มีข้อมูลอายุของผู้โดยสารออกเพื่อให้ง่ายต่อการเทรน โดยสามารถทำบน Microsoft Excel ได้ผ่านการเลือกคำสั่ง Filter ภายใต้แถบ Data เพื่อเลือกเฉพาะข้อมูลที่เป็นค่าว่างในคอลัมน์ Age แล้วทำแถบดำเลือกทุกแถวที่ผ่านฟิลเตอร์เพื่อลบแถวเหล่านั้นออก เมื่อทำการเลือกคอลัมน์ข้อมูลและลบแถวที่มีข้อมูลไม่ครบแล้ว สามารถบันทึกไฟล์ดังกล่าวให้อยู่ในฟอร์แมต .xlsx เพื่อใช้เป็นข้อมูลที่จะนำเข้าเทรนโมเดลในขั้นตอนถัดไป

เตรียม Excel Worksheet ให้พร้อมเทรนโมเดล
สำหรับ Tutorial นี้ เราจะเทรนโมเดลทำนายการรอดชีวิตของผู้โดยสารบนเรือไททานิก โดยใช้ตัวแปรอิสระ 5 ตัว ได้แก่ ชั้นของตั๋ว, อายุผู้โดยสาร, จำนวนพี่น้อง/คู่สมรสที่เดินทางร่วม, จำนวนบิดา/มารดา/บุตรที่เดินทางร่วม และค่าโดยสาร โดยใช้เทคนิค Logistic Regression

เพื่อเตรียม excel sheet ให้พร้อมสำหรับการเทรนโมเดล เราจะเพิ่มแถวด้านบนของตารางข้อมูลเพื่อเก็บค่าของพารามิเตอร์ของโมเดล ได้แก่ค่าจุดตัดแกนตั้ง () และค่าสัมประสิทธิ์ของแต่ละตัวแปรอิสระ โดยในค่าเริ่มต้นอาจตั้งให้เป็นค่า 0 ทั้งหมด และเพิ่มคอลัมน์ด้านขวาเพื่อคำนวณค่าที่จำเป็นสำหรับใช้คำนวณค่า likelihood ดังลิสต์ต่อไปนี้
ชื่อคอลัมน์ | ความหมาย | สูตรสำหรับ MS Excel (สำหรับข้อมูลของบุคคลในแถวที่ 6) |
---|---|---|
f(X) | สมการเชิงเส้นสำหรับตัวแปรอิสระเพื่อใช้ในการคำนวณโมเดล | =B |
P(1) | ค่าความน่าจะเป็นที่บุคคลนั้นจะถูกทำนายว่าเป็น 1 (รอดชีวิต) | =EXP(I6)/(1+EXP(I6)) |
P(1 or 0) | ปรับค่าความน่าจะเป็นให้ขึ้นกับเลเบลของบุคคลนั้น | =J6^B6*(1-J6)^(1-B6) |
LL | ค่าล็อกการิธึมของ likelihood | =LOG(K6) |
ค่าในคอลัมน์ P(1) เป็นค่า probability ของผู้โดยสารที่ผู้โดยสารคนหนึ่ง ๆ จะรอดชีวิตที่คำนวณจากโมเดล โมเดลที่แม่นยำควรทำนายผู้โดยสารที่รอดชีวิตให้มีค่าเข้าใกล้ 1 ในขณะที่ผู้โดยสารที่ไม่รอดชีวิตควรจะมีค่าเข้าใกล้ 0
เพื่อปรับคะแนนรวมให้รวมถึงความถูกต้องของการทายผู้ไม่รอดชีวิต แทนที่จะใช้ P(1) เป็นคะแนนสำหรับในทุกผู้โดยสารทั้งที่รอดและไม่รอดชีวิต การทายผู้โดยสารที่ไม่รอดชีวิตจึงจำเป็นต้องปรับใช้ P(0) เป็นคะแนนวัดความแม่นยำแทน นำไปสู่การสร้างคอลัมน์ P(1 or 0)
ในทางทฤษฎีเราอาจคำนวณ likelihood ของโมเดลด้วยผลคูณของ P(1 or 0) ของแต่ละผู้โดยสาร โมเดลที่ดีจะให้ผลคูณที่สูงที่สุด อย่างไรก็ดีในทางปฏิบัติพบว่าผลคูณดังกล่าวมีค่าน้อยมากเข้าใกล้ 0 และมีแนวโน้มสูงที่จะเกิดค่าความคลาดเคลื่อนเชิงตัวเลข (Numerical Error) เมื่อทำการคำนวณ ในทางปฏิบัติเราจึงคำนวณหาค่าล็อกการิธึมของค่าดังกล่าวก่อนจะนำไปคำนวณ โดยโมเดลที่ดีจะให้ค่าผลรวม log(likelihood) ที่สูงที่สุด ซึ่งจำเป็นต้องคำนวณลงมาแสดงบนเซลล์ให้เรียบร้อยเพื่อเตรียมพร้อมก่อนเทรนโมเดลต่อไป
เทรนโมเดลด้วย solver
เมื่อเตรียม worksheet พร้อมแล้ว ขั้นตอนถัดไปก็คือการให้ solver ช่วยหาค่าสัมประสิทธิ์ที่เหมาะกับข้อมูลชุดดังกล่าว โดยสามารถทำได้โดยคลิกที่แถบ Data > Solver
- Set Objective: ใส่เซลล์ที่เก็บค่าของผลรวม log(likelihood)
- To: เลือก Max
- By Changing Variable Cells: ใส่ลิสต์ของเซลล์ที่เก็บค่าสัมประสิทธิ์ของตัวแปร (พารามิเตอร์ของโมเดล)
- Make Unconstrained Variables Non-Negative: ไม่เลือก
- Select a Solving Method: เลือก GRG Nonlinear
- คลิก Solve


หลังจากนั้นโปรแกรมจะคำนวณโมเดลที่เหมาะสมให้ โปรแกรมจะแสดงหน้าต่าง Solver Results ขึ้นมา โดยผู้ใช้อาจเลือก Keep Solver Solution เพื่อเก็บค่าสัมประสิทธิ์ที่คำนวณลงบน worksheet พร้อมทั้งอาจเลือกให้โปรแกรมสร้างรายงานแสดงผลของโมเดล ก่อนกด OK เพื่อปิดหน้าต่างดังกล่าว ค่าสัมประสิทธิ์ที่คำนวณได้จาก solver สามารถนำไปใช้คำนวณบนข้อมูลของผู้โดยสารอื่นเพื่อทำนายความน่าจะเป็นที่ผู้โดยสารคนนั้นจะรอดชีวิตต่อไป
วัดค่าความแม่นยำของโมเดล
เพื่อวัดความแม่นยำของโมเดลเบื้องต้นเราต้องนำโมเดลมาใช้ทำนายว่าผู้โดยสารคนหนึ่งจะรอดหรือไม่เพื่อพิจารณาว่าโมเดลมีการทำนายผิดหรือถูกมากน้อยอย่างไร อย่างไรก็ดีเนื่องจากค่าที่ได้จากโมเดล Logistic Regression ให้ค่าออกมาเป็นความน่าจะเป็นที่คน ๆ หนึ่งจะรอดชีวิต ในทางปฏิบัติจำเป็นต้องเลือกเกณฑ์เพื่อระบุว่าที่ค่าความน่าจะเป็นมากกว่าเท่าใดถือว่าเป็นการทำนายว่ารอด โดยอาจเลือกความน่าจะเป็นที่ 0.5 เป็นจุดแบ่งระหว่างการทำนายผู้รอด/ไม่รอดชีวิต
เพื่อคำนวณความแม่นยำของโมเดล ผู้เขียนเลือกเพิ่มสองคอลัมน์ด้านขวาเพื่อทำนายการรอดชีวิต และพิจารณาว่าการทำนายดังกล่าวแม่นยำหรือไม่สำหรับผู้โดยสารแต่ละคน
ชื่อคอลัมน์ | ความหมาย | สูตรสำหรับ MS Excel (สำหรับข้อมูลของบุคคลในแถวที่ 6 ของ excel sheet) |
---|---|---|
prediction | ผลทำนาย | =IF(J6>=0.5,1,0) |
accurate | ความสอดคล้องระหว่างค่าทำนายและค่าจริง | =NOT(XOR(B6,M6 )) |

โดยรายละเอียดในคอลัมน์ accurate สามารถนำไปคำนวณหาค่า Accuracy ของโมเดลได้จากสมการ
นอกจากนี้เรายังสามารถพล็อตข้อมูลเทียบกับโมเดล ค่าของข้อมูลสามารถพล็อตลงบนกราฟโดยให้แกนนอนแทนค่าของฟังก์ชันเชิงเส้นที่ได้จากพารามิเตอร์ของโมเดลและข้อมูลจริง (คอลัมน์ f(X)) และให้แกนตั้งแสดงค่าเลเบลจริงของข้อมูล (คอลัมน์ Survived) ดังแสดงให้เห็นในจุดสีส้มในภาพ โดยพล็อตคู่กับกราฟของสมการ ซึ่งเป็นกราฟแสดงค่าที่โมเดลทำนาย

สำหรับกรณีนี้จะพบว่าโมเดลที่ได้มีค่าความแม่นยำ (Accuracy) ระดับปานกลางที่ 70% ประกอบกับเมื่อพิจารณาบนกราฟที่พล็อตเส้นโค้งซิกมอยด์คู่กับข้อมูลแล้วพบว่า ยังอาจมีค่า False Positive อยู่ค่อนข้างมาก เพื่อพัฒนาโมเดลเพิ่มเติม อาจจำเป็นต้องเพิ่มตัวแปรอิสระอื่น ๆ ที่ไม่ใช่ตัวแปรประเภทตัวเลขมาเทรนโมเดลเพิ่มเติมผ่านการ encode ให้สามารถคำนวณเสมือนเป็นตัวแปรประเภทตัวเลขได้ หรืออาจทำการวิศวกรรมฟีเจอร์ (Feature Engineering) เพิ่มเติม เพื่อพัฒนาโมเดลให้สามารถทำนายได้แม่นยำขึ้น
การสร้างโมเดลด้วย Microsoft Excel ช่วยให้สามารถตรวจสอบข้อผิดพลาดในการคำนวณ รวมทั้งช่วยให้เข้าใจคณิตศาสตร์เบื้องหลังโมเดล
สำหรับผู้ที่มีความรู้ด้านการเขียนโปรแกรมภาษาคอมพิวเตอร์พื้นฐานอาจมองว่าการพัฒนาโมเดลทางคณิตศาสตร์ผ่านการเขียนโปรแกรมภาษาคอมพิวเตอร์สามารถทำได้ง่ายผ่านการใช้ไลบรารี่สำเร็จรูป แต่การสร้างโมเดลด้วย Microsoft Excel ซึ่งมีการแสดงผลการคำนวณในทุกขั้นตอนอย่างละเอียดช่วยให้สามารถตรวจสอบข้อผิดพลาดในการคำนวณได้อย่างสะดวก รวมทั้งช่วยให้ผู้พัฒนาได้เรียนรู้และเข้าใจคณิตศาสตร์เบื้องหลังโมเดลนั้น ๆ ได้อย่างรอบคอบถี่ถ้วน และสามารถนำโมเดลที่พัฒนาขึ้นไปใช้อย่างมั่นใจ บทความนี้ได้แสดงให้เห็นแล้วว่าเราสามารถใช้โปรแกรม Microsoft Excel ซึ่งเป็นโปรแกรมพื้นฐานที่ทุกคนคุ้นชินกันดีมาใช้เพื่อพัฒนาโมเดลทางคณิตศาสตร์ที่อาศัยเทคนิคการเรียนรู้ของเครื่องได้โดยไม่จำเป็นต้องอาศัยความรู้การเขียนภาษาคอมพิวเตอร์แต่อย่างใด
เนื้อหาโดย พีรดล สามะศิริ
ปรับปรุงและแก้ไขโดย นนทวิทย์ ชีวเรืองโรจน์ และ ปพจน์ ธรรมเจริญพร