Notes from Information Science class + my very own analysis
Information ส่วนใหญ่ที่เราจะได้มักจะอยู่ในรูปของ Information Desk ซึ่งก็จะประกอบไปด้วย
- Row — แทนแต่ละ instance หรือ occasion
- Column — ซึ่งแทนแต่ละ Characteristic
ตัวแปรก็จะแบ่งออกเป็น
- Enter — ข้อมูลตัวแปรต้นของเรา
- Output — ข้อมูลที่เป็นตัวแปรตาม หรือผลลัพธ์ Final result ที่เราต้องการจะหา
ข้อมูลของเราเองก็จะแบ่งได้เป็นหลายปะเภทตามรูปกราฟข้างต้น และในบางครั้งก็สามารถเรียกได้หลายแบบ เช่น
Quantitiative อาจเรียกเป็น Numerical
Quantitiative เองก็อาจจะแบ่งเป็น Steady/Discrete หรือ Interval/Ratio ก็ได้ โดย
- Steady vs. Discrete is about how numbers behave (measured vs. counted)
- Interval vs. Ratio is about what the numbers imply (have they got a real zero?)
ซึ่งบางครั้งก็ชวนให้สับสนได้ เช่น
- Gender (Feminine/Male) ก็จะเป็นประเภทของ Nominal
- การเลือกซื้อหรือไม่ซื้อ โดยระบุค่าแทนด้วย 1 หรือ 0 ก็จัดเป็นประเภทของ Nominal
“Garbage in, rubbish out. No algorithm can repair unhealthy knowledge.”
การเตรียม Information เป็นขั้นตอนที่สำคัญและมีผลมาก ๆ กับ mannequin ของเรา “A mannequin is simply nearly as good as the info it learns from.”
เราจะมา walkthrough แต่ละขั้นตอนที่สำคัญกัน
การตรวจสอบและทำความเข้าใจ Information ของเรา โดยพื้นฐานแล้วนั้น อาจจะเริ่มจากการ ดูข้อมูลของเราคร่าว ๆ เช่น การใช้ functionใน pandas เพื่อ examine knowledge มาดู
guideline คร่าว ๆ ก็เช่นการดู
- df.form()
- df.information()
- df.describe()
- df.isnull().sum()
- df.hist()
- df.value_counts()
ซึ่งตัวแปรแต่ละประเภทก็จะมีสิ่งที่เราควรดูแตกต่างกันออกไป
Numerical variables
– เช็ค vary — out of ranges
– Graph distribution: Histogram
Categorical variables
– การดูค่าแปลก ๆ ค่าที่พิมพ์ผิด ผิดปกติ miscodes ต่าง ๆ
– Graph distribution: Frequency desk, bar chat
Goal variable
– ดูการกระจายตัวของคำตอบในข้อมูลที่เรามี
– ดูอัตราส่วนของค่าต่าง ๆ
– Graph distribution: bar chat, pie chart
เมื่อเราเข้าใจข้อมูลของเราแล้ว การดูข้อมูลที่เรามีแล้วคัดให้เหลือแต่ข้อมูลที่เกี่ยวข้อง มีประโยชน์ และสำคัญกับโจทย์ของเราเองก็สำคัญ
- Take away unqualified characteristic
การเอา characteristic ที่อาจทำให้เกิดผลที่ผิดเพี้ยนออกไม่ว่าจะเป็น
– too many distinctive values → เมื่อ map enter/output แทบจะเป็น 1:1 ซึ่งค่าเหล่านี้ lack of generalization อาจทำให้เกิด overfit ได้
– too many lacking values > 50%
– Flat values → มี output ใด output หนึ่งมากเกินไป จนแทบมีคำตอบเดียว อาจทำให้ undergit ได้ (อาจมองเป็นการตั้ง precondition แทน) - Characteristic engineering
สำหรับเรามันคือการแปลงข้อมูลให้มีความหมาย มีประสิทธิภาพมากขึ้น
เช่น เราอาจจะแปลง zip code เป็นระยะห่างจากสาขาที่ใกล้ที่สุด เอา Date/Time มาแปลงเป็นรูปแบบต่าง ๆ เช่นวันในสัปดาห์ เดือน ครั้งล่าสุดที่มา ช่วงของชั่วโมงในวัน หรือการเอา location มามองเป็น district เป็นต้น - Take away temporal Infidelity options
ข้อมูลบางตัวที่เรามีอาจจะใช้ในการทำนายไม่ได้ อาจจะเป็นข้อมูลที่ในลำดับ timeline ตอนที่เราทำนาย ยังไม่ควรได้มา ทำให้เมื่อใช้ไปอาจจะขี้โกงบอกผลลัพธ์ที่ควรได้ให้กับเราล่วงหน้า เช่น ถ้าเราต้องการทำ cresit scoring ของปี 2017 เราก็ไม่สามารถใช้ค่า FICO 2017 ที่จะถูกคิดในตอนสิ้นปี 2017 มาใช้ได้
ต้องดูลำดับเหตุการณ์หรือความสัมพันธ์ของข้อมูลตามเวลาดี ๆ - Take away leaking-target options
ข้อมูลที่แอบบอกใบ้ผลการทำนาย ทำให้ข้อมูลที่ไม่ควรมี leak ออกมา เช่น เราต้องการจะทำนายว่าลูกค้าจะซื้อของหรือไม่ แต่เราใส่ยอดการซื้อ หรือจำนวนการซื้อของของลูกค้าไป
เราจึงควรทำความเข้าใจข้อมูลของเรา และคัดกรองดี ๆ เพื่อให้ได้ mannequin ที่จะทำตามโจทย์ของเราได้อย่างมีประสิทธิภาพ
เมื่อเราทำความเข้าใจและคัดกรองข้อมูลที่จะนำมาใช้เรียบร้อยแล้ว ขั้นตอนถัดมาก็คือการเตรียมความพร้อมและตรวจเช็คข้อมูลที่เราคัดมาใช้
3.1) Lacking values
Information ที่เราได้มาอาจจะไม่ได้ excellent เสมอไป อาจจะมีความผิดพลาดในการเก็บจ จึงมี lacking worth ได้
Inputs มี lacking
ทำการแทนที่ข้อมูลนั้น ๆ หรือตัดข้อมูลชุดนั้นออก การแทนที่อาจทำได้โดย
Statistical strategy
ใช้ stat values อย่าง imply median mode หรืออาจจะเพิ่มเติมโดยการ Stats by group เช่น ใช้ Imply by group รวมถึงการ Separate lacking group ออกมา โดยการใส่เป็น group แยกใน Categorical variablesMannequin-based strategy
“use different variables to foretell the lacking values” ซึ่งก็ใช้ได้ทั้ง linear mannequin, tree-based mannequin
Goal มี lacking
ในกรณีนี้เราจะต้องตัดข้อมูลชุดนั้น ๆ ออก
3.2) Categorical to numeric variables
เนื่องจากการทำงานด้านใน mannequin ต่าง ๆ เป็นการใช้หลักการทางคณิตศาสตร์ เราจึงจะต้องแปลงตัวแปร categorical → numeric
Categorical variable แบ่งออกเป็น
Ordinal variable
เราสามารถ Enumerate ทำการ apply operate อะไรสักอย่างเข้าไปได้เลย เนื่องจากเป็นตัวแปรที่สามารถเรียงลำดับได้อยู่แล้ว เช่น เกรด
Nominal variable
เราสามารถใช้การ Encoding หรือว่าเทคนิคต่าง ๆ เช่น
One-hot Encoding — รูปแบบยอดฮิต
Converts N categorical values into N-1 separate binary columns
การแปลงจาก x = “A” or “B” or “C” มาเป็น column A B ที่เก็บ 0, 1 แทนการเป็นเลขแต่ละตัว ทำให้จะได้ A=1, B=0 แทน A A=0, B=1 แทน B และ A=0, B=0 แทน C
ข้อเสีย ถ้ามีรูปแบบเยอะจะได้ columns เพิ่มเยอะไป
Goal Encoding
replaces categorical values with the typical of the goal variable for every class. เหมาะกับ characteristic ที่มี distinctive worth เยอะ
ข้อเสีย overfitted ง่าย, Information leakage
Goal Averaging (Likelihood Encoding)
คล้าย Goal Encoding แต่ใช้กับ classification issues(Binary). Replaces every class with the likelihood of the goal class.
จำนวนครั้งที่ class นั้น ๆ เป็น 1/จำนวนครั้งที่เป็น class นั้น เช่น
df[‘City_encoded’] = df.groupby(‘Metropolis’)[‘Churn’].remodel(‘imply’)
ข้อเสีย overfitted ง่าย, Information leakage
Weight of Proof (WoE) Encoding
Utilized in binary classification issues. Calculates the ratio of optimistic to unfavourable outcomes in a logarithmic scale.
ข้อเสีย Wants massive knowledge
Smoothed Weight of Proof (SWoE)
Modification of WoE to deal with small pattern sizes and keep away from excessive values. Makes use of Laplace smoothing to make sure stability.
ข้อเสีย Wants tuning
3.3) Truncate outliers
take away or remodel outliers
การระบุ outliers ก็อาจทำได้โดย
1.) ใช้ regular distribution
2.) ใช้ Field plot แล้วใช้ IQR ในการคิด
3.) trim ตามเปอร์เซ็นหัว, ท้ายที่กำหนด
3.4) Characteristic transformation
ดูความเบ้จากค่า skewness ถ้าเบ้มากอาจจะต้อง remodel เพื่อปรับค่า เช่น การ take log, Bining(Group ค่าเป็นช่วงแล้วใช้เลขช่วงแทน)
3.4) Characteristic engineering
สำหรับเรามันคือการแปลงข้อมูลให้มีความหมาย นำค่ามาคำนวณ หรือคัดเอาพฤติกรรมต่าง ๆ เช่น Conduct from transactional knowledge (RFM/RFA) ดู Recency(final order) Frequency(variety of orders within the given interval) Financial worth(How a lot cash spent)
แบ่ง knowledge ออกเป็นส่วนสำหรับ Practice/Validate/Take a look at หรือ Practice/Take a look at โดยที่ดราจะต้องคง distribution ตั้งต้นเอาไว้ (stratification) ส่วนมากก็ใช้ train_test_split ในการแบ่งโดยปกติ (ใส่ random_state เพื่อให้ replicate ผลได้ กับ stratify ด้วย*)
Practice → ใช้สำหรับ practice
Validate(non-obligatory) → ใช้สำหรับ mannequin tuning
Take a look at → ใช้สำหรับ take a look at/consider(simulate on unseen)
บางครั้งในขั้นตอนการแบ่งชุดข้อมูลก็อาจทำให้เกิด Information leaking ได้เช่นกัน เช่นสมมุติเรามี enter เป็นภาพจาก VDO เราก็อาจจะต้องแบ่งให้ VDO เดียวกัน อยู่ในชุดเดียวกัน หรือในข้อมูลประเภท time sequence เราก็อาจจะต้องแบ่งตามช่วงเวลาที่ต่อกัน
หลังการ practice ก็อาจจะเกิด overfitting/underfitting ซึ่งเราก็ต้องแก้ไขตามวิธีการต่าง ๆ ต่อไป
บางครั้งในขั้นตอน Validation ก็อาจจะเกิดการ overfitting บน validation take a look at ได้เหมือนกัน ซึ่งวิธีการ Validate ที่จะช่วยได้ก็คือ
Ok-Fold Cross Validation
Why: Helps estimate the mannequin’s anticipated efficiency, Prevents unfortunate splits.
เวลาที่เราแบ่งเป็น Practice/Validate/Take a look at สังเกตว่า เรามีการ validate บน knowledge ก้อนเดียว ซึ่งผลจากการ validate บน knowledge ก้อนเดียวนั้น ก็ไม่ได้แปลว่าผลจะดีกับ knowledge ทั้งหมด
Is the mannequin constantly good?
The way to choose the very best hyperparameters and mannequin choice?
แทนที่จะทำแบบนั้น เราเลยแบ่งเป็น Practice/Take a look at แต่ก้อน Practice ของเราจะแบ่งเป็น ก้อนเล็ก ๆ okay ก้อน โดยเราจะวน iterationในการ practice และ validate ทั้งหมด okay รอบ โดยเราจะวนก้อนสำหรับ validate 1 ก้อนไปเรื่อย ๆ และให้อีก k-1 ก้อนเป็นส่วนสำหรับ practice ผลการ validate ก็จะเป็น imply(accuracy_scores) ของทุก fold นั่นเอง การทำแบบนี้จะทำให้ทุก Practice knowledge มีส่วนในการ validate ทำให้เราได้ผล validate ที่ตรงกับความจริงมากขึ้น และสามารถเลือก/เปรียบเทียบ mannequin ได้ดีกว่านั่นเอง