เรื่องสยอง 2 บรรทัด

ในความเป็นจริง ถ้าเราเลือกได้เราคงไม่อยากเลือกผิด !

ในชีวิตเราจะมีช่วงเวลาซักกี่ครั้งที่ต้องเลือก
และถ้าเราเลือกได้จริงๆ
เราคงไม่อยากเลือกตัวเลือกที่ผิดพลาดหร่อก ….

2 อาทิตย์ที่ผ่านมาหลังจากที่จะได้รับ Project ใหม่
เป็นช่วงเวลาตื่นเต้นมากๆ ที่จะได้ทำในสิ่งที่ไม่เคยทำมาก่อน
มันเป็นความรู้สึกของการที่เห็นสิ่งใหม่ๆ
เหมือนเด็กๆที่กำลังรอว่าเมื่อไหร่จะได้ไปเที่ยว
เหมือนสมัย Ragnarok กำลังเปิดตัวใหม่ๆ
.
มันช่างเป็นช่วงเวลาที่นานผิดปกติ
แต่ละวินาทีที่เฝ้ามองนาฬิกาที่แทบล่างขวามือของคอมส์พิวเตอร์
แล้วพบว่าเมื่อไหร่จะได้เริ่มทำ Project
เมื่อไหร่จะถึงวันนั้นเสียที
.

เมื่อถึงวันที่เริ่มทำ Project จริงๆ
ความสนุกก็ได้เริ่มขึ้น และทวีคูณขึ้นเรื่อยๆ
ใบหน้าเริ่มจดจ่อคอมส์ตลอดตั้งแต่ เช้าจนถึงค่ำ
พลางเปิดเพลงไปเป็นระยะๆ
เพียงไม่กี่วัน สิ่งที่ผมต้องเจอมันก็เริ่มเยอะขึ้นๆ
.
และเริ่มหนักขึ้นเรื่อยๆ
การเขียนโค้ดในตอนนี้มันไม่ใช่ Python หรือ Pyspark อีกต่อไป
นอกจากการ Deliver งานให้ทันเวลาในแต่ละชั่วโมงแล้ว
สิ่งที่เพิ่มเติมเข้ามาคือ
Framework ใหม่… !!

ใช่แล้วครับ Pytorch และ Tensorflow
2 สิ่งที่เข้ามาพร้อมกัน และต้องรันบน Spark

แค่ Spark กว่าจะรันโชว์ผลให้ได้ซัก 10 บรรทัด
ยังลองผิดลองถูกกันเกือบครึ่งวันเลย
แล้วนี่ Framework ใหม่ด้วยแล้ว
โอว้โหว
บอกได้เลยว่า
xxx !!! มวากก

เด็ด !!! มวากก
เอาจริงๆตัวผมเองไม่มีเวลามาคิดหร่อกว่า เห้ยแม่งยากหวะ
เพราะตอนนี้ในหัวคือต้อง Deliver งานให้ทัน
ต้องทำให้ได้แค่นั้น
แต่ด้วยความล้าหลายวันที่ผ่านมา
และแล้วมันก็ถึงวันนี้จนได้
วันที่ …. !!!
ไม่คิดเลยว่าจะต้องเจอกับสิ่งที่มองไม่เห็น
สิ่งที่เราต้องเผชิญบางครั้งเราเองก็ไม่ได้เป็นคนเลือก

มีหลายคนบอกว่า
ถ้าเราเลือกที่จะหนีมัน
สุดท้ายแล้วเราจะไม่มีทางเลือกอีกต่อไป
แต่ถ้าวันนี้เราเลือกที่จะเผชิญหน้ากับมัน

ใช่แล้วครับ
เราก็ต้องเผชิญมันต่อไปนั่นแหละ !!
แต่มันง่ายขึ้นไง
มันไม่ยากเหมือนครั้งแรกใช่ไหมล่ะ !?

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

มองซ้ายขวา ก็ไม่มีคนใช้ Cluster นี่หว่า !!!
กว่าจะรู้ตัวอีกทีผมก็ Restart Cluster ไปกว่า 5 รอบ
ผมเริ่มดื่มน้ำเพิ่มก่อนลงมือพิมพ์โค้ดต่อ
ในใจภาวนาขอให้รันผ่านด้วยเถิด
ในขณะนั้น ผมแก้ปัญหาแบบลืมดูเวลา
หันไปมองอีกทีเกือบตี 1 แล้ว
.

ผมพยายามบรรจงพิมพ์โค้ด และเขียนใส่กระดาษ
พร้อมทั้งเปิด Google พิมพ์ว่า Pytorch Docs อ่านตามคู่ไปด้วย
กับอีแค่คำสั่ง
F.softmax()
“ทำไมมันไม่มีวะ”
ในใจก็คิดเราเขียนผิดตรงไหนวะ
เช็คโค้ดด้านบนก็ import ครบหมดแล้ว

import torch
from torch.utils.data import Dataset, Dataloader 
import torch.autograd as autograd 
from torch import Tensor 
import torch.nn as nn 
import torch.nn.functional as F 
import torch.optim as optim
from torch.jit import script, trace

ขยี้ตาหลายรอบมาก “เห้ยอะไรวะ”
ใจแมร่งโคตรท้อ ล้าก็ล้า
แต่งานก็อยากให้เสร็จน่ะสิ

ไม่แน่ใจว่าสัปหงก หรืออะไรดลใจให้เหลืบไปมอง บรรทัดข้างล่าง
.

%run /path/path/path/utilities

ความง่วงที่มีอยู่หายเป็นปริดทิ้ง
โอว้โห อ้าย สลัดผัก
เห้ยเอ็งโหลด Function ข้ามไฟลล์นี่ไง !!!
และในไฟลล์นั้นก็มีการใช้งานโค้ดว่า

import pyspark.sql.function as F

ครับ….. ….!!!
ตีสามแล้วนะ !!
ถ้าเลือกได้จริงๆ
ผมก็คงเลือก

import torch.nn.functional as XXX

สรุป !!

เช็ค Library ที่ใช้ก่อนดีดีว่าเราย่อชื่อซ้ำกันไหม
เพราะอาจจะเจอเรื่องสยองขวัญแบบบอยด์ ก็เป็นได้ !!!

ราตรีสวัสดิ์ครับ

ปี 2020 กับ Skills ของ Data Scientist ที่ต้องเจอ

หยิบกระดาษขึ้นมาแล้วทำ Checklist กันได้เลย
.


📚 1. Machine Learning และ Deep Learning
จริงๆก็เป็น Main Skills หลักที่ต้องมีเลยนะ
เพราะได้ใช้ในการทำงานสายนี้โดยตลอด
ส่วน Machine Learning เริ่มต้นได้จาก
Traditional Model ง่ายๆเช่น
Linear Regression เจ้าเส้นตรง หรือ
Decision Tree เจ้าต้นไม้
ซึ่งสามารถอธิบายเป็นเหตุเป็นผลได้ไม่ยาก
ให้กับคนที่อยู่นอกสาย Data
.
ส่วน Deep Learning รู้ไว้มีประโยชน์กว่าไม่รู้แน่นอน
เพราะโลกเรา Data เยอะขึ้นเรื่อยๆ
และบางงานเราเน้น Model แม่นๆ
มากกว่าการอธิบายว่าทำไมมันถึงต้องแม่น
.
ส่วน Framework ที่ใช้เขียนก็มีหลายตัวด้วยกัน
เริ่มแบบง่าย ก็ ScikitLearn
หรือระดับกลาง Keras (ปัจจุบันรวมกับ Tensorflow ใช้ง่ายขึ้นเยอะ)
ถ้ายากขึ้นมาหน่อยก็ Pytorch + Tensorflow
ซึ่งทั้งสามตัวเขียนผ่านภาษา Python นั่นเอง
.
สำหรับ ML + DL แอดใช้ตอนทำงานช่วงปีที่หนึ่งตลอดเลย !!
อาจจะลงเป็น ML 80 % DL 20 %
.


📚 2. Natural Language Processing (NLP)
คือการใช้ประโยชน์ จากข้อมูลพวก Text
หรือสอนคอมส์พิวเตอร์ให้เข้าใจภาษามนุษย์
โดย Model ที่เราต้องเจอจะค่อนข้างยากขึ้นมาอีกระดับ
ส่วนใหญ่จะเจอพวก Sequential Model
เช่น LSTM, Bi-LSTM, Transformer, BERT,
Elmo, GPT เป็นต้น
.
ความยากในการศึกษาในเรื่องนี้คือการลงมือทำ
เพราะเราต้องเจอกับภาษา RegularExpression
ใช้ในการจัดการข้อมูล หรือดึง Text ที่ต้องการ
.
ด้วยความที่ NLP เกี่ยวข้องกับภาษา
มันจึงเกี่ยวพันธ์กับ Voice หรือเสียงด้วยนะ
ซึ่ง Data ก็อยู่ในรูปแบบของ Sequential อีกนั่นเอง
น่าสนุกใช่ไหมล่ะ 5555555+
.
สำหรับ NLP แอดใช้ตอนทำงานช่วงปีที่สองค่อนข้างเยอะเลยล่ะ !!
.


📚 3. Statistics สถิติ หนีไม่พ้นหร่อกนะ ฮ่าๆๆๆ
.
คำแนะนำง่ายๆคือเข้าใจ ว่าต้องใช้ตอนไหน
เช่นเราเจอข้อมูล อยากทราบ Insight ง่ายๆ
ก็หมุนข้อมูลไปมา ดูค่า Mean, Min, Max, Range,
Mode, Median, Quantile บลาๆๆๆ
เท่านี้ก็ช่วยระดับนึงแล้ว
.
สถิติ ช่วยให้เราคิดอย่างเป็นระบบ
และไม่เชื่อข้อมูลอะไรง่ายๆ หากไม่มีข้อมูลมากเพียงพอนั่นเอง
.
สำหรับแอดแล้ว Stats ใช้ตลอดการทำงานเลยนะ ^^
.


📚 4. Programming Skills หนีไม่พ้นอีกเช่นกันกับการ Code
.
เรามีให้เลือกมากมายเลยนะไม่ว่าจะเป็น
R, Python, Julia, Matlab
ซึ่งจะเริ่มอย่างไรดี
ก็ลองเลือกก่อนละกันว่าจะเริ่มอะไรก่อนให้ได้ซัก Project
แล้วค่อยเรียน SQL ต่อยอดเพิ่มเติม
.
การเขียนโค้ดช่วยให้เราทำงานยากๆง่ายขึ้น
ทำงานซ้ำๆน่าเบื่อ ให้กลายเป็นอัตโนมัติ
ทำงานที่คำนวณยากให้กลายเป็นงานน่าทึ่ง
และจัดระบบความคิดการทำงานให้เป็นเหตุเป็นผล
.
ก่อนเข้ามาสายงานนี้แอดเรียนตลอด 3 เดือน
จาก Data Camp โดย 3 เดือนนั้น
ตั้งใจเรียนตั้งแต่เช้ายันดึก
+ กับการทำ Project จนมันซึมไปเอง
.


📚 5. MLOps & Workflow
.
ว่าด้วยเรื่องงานของ Data Scientist
หลังจากเราทำ Model เจ๋งๆได้ซักอย่างแล้ว
เราก็คงอยากให้มันทำงานได้เองอัตโนมัติ
นั่นคือการทำ Model Deploying
.
การเขียนโค้ดก็จะมีความละเอียดมากขึ้น
มีความเข้าใจในเรื่องของ Inflastructure มากขึ้น
เข้าใจการ Track Error ที่เกิดขึ้น
รวมไปถึง Cycle ของการทำงาน Model
ว่าเราจะทำการ Train Model ใหม่อีกรอบเมื่อใดดี
.
เรื่องนี้แอดทำมาตั้งแต่ทำงานปีแรกจนถึงปัจจุบันเลยล่ะ
เพราะได้เห็นความ Automation
และ Model เรารันใน Business ได้ โคตรจะฟินเลย
ซึ่ง Skill ด้านนี้จะค่อนข้างยากหน่อยน้า
แต่รับรองเป็นแล้วสนุกแน่นอนนน !
.


📚 6. Git & Agile หนีไม่พ้นอีกเช่นกันกับการ Code
.
การใช้ Git เพื่อใช้งานเขียนโค้ดหรือทำ Project กันเป็นทีม
ข้อนี้อาจจะไม่คุ้นนัก หรือเห็นแล้วต้องเรียนด้วยหรอ
อยากจะบอกว่ารู้ไว้ก็ดีกว่าครัช
แต่ไม่จำเป็นต้องรู้ก่อนเป็นอันดับแรก
.
Git ช่วยให้โค้ดเราไม่ปนเปกับโค้ดคนอื่น
และเป็นที่ให้เราแก้ไข และเซฟโค้ดในแต่ละ Version
ซึ่งถ้าไม่มีเจ้า Git ก็เหมือนไม่มี Backup โค้ด
หรือหากโค้ดเราเสีย อยากได้ Version เก่าคืนมา
ก็ทำไม่ได้นั่นเอง !!
.
ส่วน Agile เป็นวิธีการทำงานรูปแบบหนึ่ง
ซึ่งมาจากทางฝั่ง Tech Company
โดยเน้นการทำงานเป็น Cycle
มีการ Feedback งานกันตลอด
และมีการ Deliver งานออกตลอดเช่นกัน
โดยที่งานนั้น ไม่จำเป็นต้องเสร็จ 100 %
แต่เน้น Feedback ช่วยให้งานค่อยสมบูรณ์ขึ้นนั่นเอง
.
เอาจริงข้อนี้แอดอาจจะพูดได้ไม่เต็มปากว่าใช้
เอาเป็นว่าใช้ประมาณ 30 % ละกัน อิอิ
.


📚 7. Big Data & Cloud
.
เมื่อคอมส์เครื่องเดียวไม่พอ
และการทำ Deploy Model อยู่รอบตัวเรา
การเรียนรู้เรื่องพวกนี้จึงเป็นเรื่อง พื้นฐานก็ว่าได้
โดยเรื่องที่เราต้องเจอเพิ่มขึ้นคือ
การเขียนภาษาเพื่อประมวลผลคอมส์หลายๆตัว
หรือ Spark, Scala, Hadoop, Hive
.
อีกด้านหนึ่งคือเรื่องของ Cloud
เช่น Google, Cloudera, Azure, AWS
ซึ่งแต่ละเจ้าก็มีข้อดีข้อเสียต่างกัน
หรือความถนัดในการใช้แตกต่างกันไป
.
ถามแอดว่าจำเป็นไหม
ก็จำเป็นกลางๆนะ
ถ้าเราไม่เจอข้อมูลขนาดใหญ่นัก ก็คงไม่จำเป็น
แต่ถ้าเราอยู่ Enterprise บ. ใหญ่ๆ
ก็ได้ใช้แน่นอนครับ
.


📚 8. Visualization & Data Wrangling
.
สุดท้ายคือสกิลในการงัด Insight ออกมา
ซึ่งคือการ Process Data และแสดงผล
โดยผลที่ออกมาเราจะต้องนำเสนอให้คนอื่นเข้าใจ
พูดง่ายๆก็คือ อธิบายงานที่เราทำให้เด็กๆเข้าใจได้นั่นเอง
.
และผลที่ออกมา…
สามารถทำให้เกิด Business Impact ได้ !!
ซึ่งข้อนี้สำคัญมากๆๆๆๆๆๆๆ
โคตรมากเลย และแอดก็ใช้ข้อนี้ตลอดการทำงาน
.
.
.
สุดท้ายแล้ว เราอาจจะมี Skill ใน List ทั้งหมด
หรือมี Skill แค่อย่างเดียว หรือจะไม่มีเลยก็ตาม
ทั้งหมดนี้มันแค่ส่วนเดียวเองนะที่ต้องเจอในการทำงาน
เพราะ Skills ต่างๆขึ้นกับงานที่ได้รับมอบหมาย
รวมถึงบริษัทที่ได้ไปทำด้วย
ดังนั้น ดูให้แน่ชัดว่าที่เราต้องไปทำต้องใช้ Skills อะไรบ้าง
แล้วเรามีตรงกันไหม ถ้ามีก็เรียนของใหม่เพิ่ม
แต่ถ้าขาดก็ต้องรีบเติม หรือ
หาที่เหมาะกับ Skills ที่เรามีก่อนนั่นเองฮับ
.
อยากฝากไว้ว่า
งานสาย Data Scientist นั้น
เป็นงานที่ต้องเรียนรู้ตลอดเวลา
และพยายามย่อย Data ให้เป็นภาษาคนที่เข้าใจง่าย
โดยที่สามารถสร้าง Business Impact ขึ้นมา ^^
และจริงๆแล้ว List ทั้งหมดนี้ก็เป็นแค่ส่วนเดียวเท่านั้นเอง
เพราะในการทำงานต้องใช้ Soft Skills อีกเยอะเลยล่ะ !!
.
ยังไงบอยด์เป็นกำลังใจให้กับทุกคนที่อยากเข้ามาในสาย Data Scientist นะครับ ❤🌟
.

Reference:
https://towardsdatascience.com/what-skills-new-and-seasoned-data-scientists-should-learn-in-2020-233876b852fa

The First Achievement

วันนี้วันที่ 3 แล้วของการทำงาน 😀🍺

ปิดได้ 1 โปรเจค แล้ววว (แอบดีใจ เย้ๆ)
เป็นโปรเจคใช้ ML ช่วย Optimize ลด Cost ไปได้หลัก 100M
ซึ่งแน่นอนว่าเราเองก็คงต้อง Convert ให้เห็นตัวเงิน !!
เพราะการที่เราคุยเรื่อง Model กันในทีม DS
แล้วบอกว่า Model นี้ดีไม่ดี เราก็คุยกันที่ Metrics

เช่นในโจทย์ Regression ทำนาย Continuous Data
เราก็อาจจะคุยว่า เห้ย RMSE ดีโคตรเลย
MAE ก็ดี MAP ก็ว้าว แล้วก็เลือก Model ที่ดีที่สุดไปใช้เลย
แต่เวลาเราต้องคุยกับ Stakeholder
เช่นบอกกับทีม Marketing
แล้วบอกว่าพี่ Model ผมแม่งลด Error เหลือ 5.721 เลยนะพี่
Marketing คงทำหน้า WTF แล้วคิดในใจเบาๆ
(อะไรของเมิงวะครับ/คะ คุณน้อง !!??)

พอ Convert จาก Model เป็นเงินให้น้องๆในทีมดู
น้องๆก็รู้สึกภูมิใจ และรู้สึกว่างานของเรามีคุณค่ามากๆ
(อย่างน้อยก็มองหน้ากันแล้วคุยเล่นๆว่า จ้างพวกเราคุ้มละเว้ย ถถถถถ lol)
จริงๆแล้วโปรเจคนี้เป็นแค่การทำ Demand Forecasting
เอาจริงๆก็ดูแสนจะธรรมดาเลยนะ
แต่แน่นอนอ้ายธรรมดาบางที
การจะนำเสนอมันก็ไม่ง่ายซะทีเดียว

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

นอกจากนี้พอ Convert เป็นตัวเงินได้
หากมีหลายๆโปรเจคที่ต้องทำ
เราก็สามารถ Prioritize ถึงความสำคัญของงานได้ง่ายขึ้นด้วย
แต่อาจจะต้องใช้ Metrics ตัวอื่นๆเข้ามาเกี่ยวข้อง
เช่น Resources, Time, Complexity และอื่นๆ

ซึ่งมีครั้งนึงที่ทำงานเก่า SCB
ได้มีโอกาสไปนำเสนอโปรเจคให้ President ฟัง
พี่เค้าก็บอกว่า เห้ยไม่ต้องเล่าให้ผมฟังถึง How หร่อก
เล่าว่าผมได้อะไรจากสิ่งที่พวกคุณทำก็พอ
หรือผมต้องไปทำอะไรต่อจากสิ่งที่พวกคุณทำมา
มันช่วยอะไรได้บ้างล่ะ เป็นตัวเงินยิ่งดีนะ
เหมือนได้ตอกย้ำการเรียนรู้ว่า เออสำคัญเลยนะเว้ยเรื่องเงิน

หลังจากที่บอกน้องๆถึง Contribution แล้ว
ก็มีไฟในการทำงานกันต่อ
น้องในทีมคนหนึ่งบอกว่า
ผมอยาก Tune Model ให้ดีกว่านี้ครับพี่

พอบอยด์ได้ฟังแล้วก็หัวเราะออกมาลั่นเลย
เอ็งเตรียมรับวิชาจากพี่เพิ่มได้เลย ถถถถถถถถถ
ระวังธาตุไฟแตกนะ ถถถถถถ
จะทำให้เกิด Academic Paper ที่มีชื่อของน้องๆ
รวมถึงชื่อบริษัทด้วยเลยล่ะ !! ^^

โชคดีเรื่องนึงคือน้องในทีมกระตือรือร้นมากๆเลย
คนนึงชอบ Research มากๆเลยว้าวที่จะเขียน Paper เลย
อีกคนก็ชอบเรียน ไปสอบนู่นนี่นั่น
ตอนแรกได้ GCP Data Engineer มา
วันนี้คุยอีกที อ้าวได้อีกใบ Solution Architect แล้ว โอว้โคตรเท่ห์

คิดในใจเราต้องเก็บ GCP Engineer กับ MLE ให้ได้โว้ยยยย ถถถ

ปูลู ที่ทำงานใกล้ Singha Complex เลย
เลยแวะไปทานบะหมี่ที่ตึกช่วงกลางวัน แล้วก็ถ่ายรูปไว้ยามดึก แฮร่ !!

#MyDailyBlog ❤️😀🍣

Back to the Future ??

เรื่องเล่าระหว่างทางกลับบ้านกับเพื่อน

จริงๆเรื่องนี้ก็เกิดขึ้นไม่นาน คือเมื่อวานระหว่างกลับบ้าน
เรานั่งรถกลับบ้านไปด้วยกัน เพราะทางเดียวกัน
เพื่อนบอยด์ทำงานด้านคอมส์เหมือนกัน
แต่เป็นสาย Computer Graphic ด้าน Design
(ถ้ามันอ่านอยู่คงรู้แหละ ถถถถถ)

ระหว่างทางรถก็ค่อนข้างติด
(ติด xxxๆ เลยก็ว่าได้)
เพราะต้องผ่านแยกแคราย
และช่วงนั้นกำลังทำรถไฟฟ้า
คือเหลือทางวิ่งบางจุดแค่เลนเดียว
และบางจุด 2 เลน แต่ก็มีรถจอด คิดดู๋

พอรถติดปั๊บ ก็เป็นช่วงเวลาของการเริ่มต้นสนธนา
.
บอยด์: เมิงว่าช่วงเวลาไหนที่เมิงคิดว่าอยากย้อนเวลากลับไปวะ !
เพื่อน: อืม … กูว่า กูอยากย้อนกลับไปช่วงปี 1 หวะ
บอยด์: (สงสัยทำไมต้องปี 1 วะ!?)
เพื่อน: กูอยากย้อนไปเปลี่ยนสายสกิล Design

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

บอยด์: เปลี่ยนสายไปทำอะไร ? (เราถาม)
เพื่อน: อยากไปสายปั้นโมเดล 3D
บอยด์: เราก็ร้องอ๋อเลย เพราะเข้าใจ

ณ ตอนนั้นด้วยนิสัยชอบเล่าเรื่อง
คือถ้าใครสนิทกับบอยด์จะรู้เลยว่าคุยได้ตลอดเป็นละครฉากๆ
แล้วทีนี้เราก็เริ่มต้นด้วยเรื่องสมมติ !??

บอยด์: เอางี้ ถ้าเมิงย้อนเวลากลับไปได้ จริงๆนะ
ถามคล้ายๆเดิม คราวนี้สมมติว่าย้อนเวลากลับไปได้จริงๆ
เพื่อน: โหววว ถ้ากูย้อนกลับไปได้นะ กูซื้อหุ้นรวยไปแล้ว
บอยด์ + เพื่อน: (หัวเราะกันดังลั่น ถถถถถถ)

บอยด์: อ่ะ กูให้เพิ่มอีกอย่างด้วย ในขณะที่ย้อนเวลากลับไปได้เนี่ย
เมิงมีความทรงจำในปัจจุบันทั้งหมดด้วยนะเว้ย !!
เพื่อน: ok งั้นกูย้อนไป ปี 1 เนี่ยแหละ
เพราะปัจจุบันเองกูก็ได้สกิลตัดต่อชำนาญละ
กูอยากกลับไปตั้งใจฝึกฝนสาย 3D มากๆเลย

บอยด์: (เพื่อนเราแม่งรักในอาชีพจริงๆหวะ)

บอยด์: เอางีี้ กูให้พรเมิงเรียบร้อยละ !!
เพื่อน: (ทำหน้า งง !!)

เพื่อน: เดี๋ยว อะไรของเมิงวะ !
บอยด์: เมิงลองคิดดูนะ !

จริงๆแล้ว เราอาจจะเป็นตัวตนที่ย้อนเวลามาจากในอนาคตก็ได้ ??
เพียงแต่ว่าความทรงจำของเรา ไม่ได้ตามมาด้วย !!
นั่นหมายความว่าเราสามารถเริ่มต้นทำอะไรก็ได้ตลอด
ทุกๆช่วงเวลาที่ผ่านไป
มันอาจจะเป็นช่วงเวลาที่ตัวตนในอนาคตของเราย้อนมาก็ได้ !!!
ดังนั้น กูว่านะ เมิงเองก็สามารถไปสาย 3D ได้เว้ยเห้ย
หรือยิ่งกว่านั้นนะ เมิงอาจจะทำอะไรมากกว่านั้นก็ได้

เพื่อน: (…)

บอยด์: (แอบเห็นเมิงยิ้มนะ ถถถถถ+)

ซักพักจากนั้นก็ถึงป้ายพอดี
แล้วก็เดินทางแยกย้ายกลับแยกทางกันไปต่อ
จบอีกหนึ่งวันที่มากกว่าหนึ่งวันจริงๆ

บางครั้งแค่ได้สนทนากับเพื่อนสนิท
แค่ช่วงสั้นๆ แมร่งก็โคตรดีแล้วจริงๆ

ปูลู เรื่องเล่าเยอะจริงๆ ใจจริงอยากทำเพจแนวเขียนเล่าเรื่องเก็บไว้นะ
เป็นเรื่องราวที่ได้คุยกับคนที่พบเจอ หรือเรื่องราวความประทับใจไว้จุง
แต่ก็มี Blog อยู่่แล้วนี่หน่า ถถถถถ อัพเดทในนั้นละกันเนาะ ^^

ปูลู2 รูปถ่ายมื้อดึกก่อนเข้าบ้าน

#MyDailyBlog❤️🌟🍣😀

My First Day at New Work Place

วันนี้ทำงานวันแรก รู้สึกโลกกลมมากๆ !! 😀

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

ช่วงเย็นๆ น้องในทีมคนนึงก็กลับบ้านทางเดียวกัน
เลยได้มีโอกาสคุยเล่น ไปเรื่อยเปื่อย
ซึ่งก็เป็นโอกาสที่ดีเลยนะเอออ
เพราะทำงานมาก็เต็มที่กันมากๆ

ดังนั้นเวลานอกงานนี่แหละที่จะได้คุยแบบชิลๆ
น้องในทีมคนหนึ่งทำงาน DE กึ่ง DS
เชี่ยวด้าน DE เลยล่ะ เลยสอบถามถึงที่มาที่ไป
เพราะงานที่ทำก็มีขอบเขตของ DE ด้วยล่ะ

คุยไปคุยมา น้องบอกว่าจบ Stat มาล่ะเออ
แต่ลองสอบ Google Cloud Professional Data Engineer
ซึ่งแน่นอนว่าตอนสอบก็ต้องมีการเตรียมตัวสอบ
เลยได้อ่านได้ศึกษา ลองทำเกี่ยวกับ Data Engineer
ประกอบกับทำงานด้าน Data Engineer มาด้วยนะเออ
ทำให้เชี่ยวชาญด้านนี้ระดับนึงเลยล่ะ !!

คุยไปคุยมา เราก็คิดในใจว่า
เรามาทาง Data Scientist ก็ต้องสอบ
Machine Learning Engineer ให้ได้บ้าง
เพราะที่ทำงานต้องทำทั้ง DS และ DE ไปด้วย
แต่อัตราส่วนงานคง 70:30

ซึ่งรวมๆแล้วก็สนุกดีหมดเวลา 1 วันโดยลืมเวลาทำงานเลย
รู้สึกว่า 1 วันทำงานมันผ่านไปไวมวากจริงๆ
คิดในใจ เราต้อง Keep สิ่งนี้ไว้เรื่อยๆล่ะนะ ^^

จุดพีคของเรื่องที่กล่าวมาก็คือ
น้องในทีม มองไปมองมา คุยไปคุยมา
อ้าวคุ้นๆหน้ากันนี่หว่า
น้องเคยมาสัมภาษณ์ที่ SCB
เราก็ลุ้นนะอยากให้น้องได้ เพราะตอนมาสัม
น้องทำสไลด์มาดีมากจริงๆ เล่าได้ดีเลยล่ะ
แต่ว่าไม่ผ่านสัมภาษณ์ TT

สุดท้ายโลก กล๋มมม กลม
ได้มีโอกาสมาทำงานร่วมกัน lol
จริงๆเรื่องเล่ายังมีอีกมากมายเลยนะเอออ
ไว้ไปเขียนอัพเดทใน Blog ต่อละกันนะ

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

ปูลู 2 ตื่นมาวิ่งคาดิโอตอนตี 4 ครึ่งละกันนะ ^^

#MyFirstDayAtWork❤️🌟🍣😀

Day 06 – Levenshtein Distance

I am writing the data series daily
1 year we will have 365 data stories for reading ^^

How to compare string distance ??

Imagine that you work in the NLP task
(NLP – Natural Language Processing)
And you want to compare how similar of 2 strings
What will you do !??

For example
If we want to compare 2 strings

  1. PrayutZa
  2. PrawitZa

Let’s see
To compare how similar!
It looks like you measure the distance between 2 strings.
The more the distance it means
2 string are far from together
The less the distance it means
2 string are close together

Is it easy !? Right ^^

So. .. the question is how to measure it !??

What we learned from the past !?
Hamming Distance!
They compare binary vector
Question: how to turn string to binary vector !?

PrayutZa
The first string >> binary vector !?

But the intuition of Hamming Distance is
How to compare each axis step by step
For example
X1 = [1, 0]
X2 = [1, 1]
We compare the first axis
1 and 1 are equal it means they are similar

The second axis !!
0 and 1 are different by 1 unit, so they are not similar !!!

Is it possible
That we can compare each string by Hamming distance !?
From example above
If we want to compare 2 strings

  1. PrayutZa
  2. PrawitZa

Let’s compare one by one
(If we do not care case sensitive)
P and P >> same character get 0 point
r and r >> same character get 0 point
a and a >> same character get 0 point
y and w >> different character get 1 point
u and i >> different character get 1 point
t and t >> same character get 0 point
Z and Z >> same character get 0 point
a and a >> same character get 0 point

With Hamming Distance
If we apply the rule from them
We will get how is likely equal
= 1 – (sum(point) / length of strings)

From calculation above
If we apply Hamming Distance
We will get
PrayutZa and PrawitZa
Similar score
= 1 – (2/8)
= 0.75 !!
Or 75 % Similar by Hamming Distance score !!

But what if 2 strings have different length

  1. PrayatINWZa007
  2. PrawitINWZaaIO

They are of different lengths!???
So…, How to measure how similar !?

** Note !!!
If you can remember Hamming Distance
Let’s go to see how Levenshtein distance work !>>>

If not, Don’t worry about it
You can learn more on day 1
I provide on the link below
Link: https://bigdatarpg.com/2021/01/07/day-01-hamming-distance/


Levenshtein Distance

Levenshtein Distance is invented by Russian and mathematician
named Vladimir Levenshtein, who considered this distance in 1965
Levenshtein Distance may also refer to Edit Distance
So…. What is Levenshtein Distance??

Levenshtein Distance consists of 3 components

  1. Insertion
  2. Substitution
  3. Deletion

Let’s see the simple example
If we have 2 strings to compare

  1. PrayutZa
  2. PrawitZa

Let’s compare each character one by one
(If we do not care case sensitive)
P and P >> same character get 0 point
r and r >> same character get 0 point
a and a >> same character get 0 point
y and w >> different character get 1 point (Substitution y and w)
u and i >> different character get 1 point (Substitution u and i)
t and t >> same character get 0 point
Z and Z >> same character get 0 point
a and a >> same character get 0 point

After that, we compute the score by
sum(point) / length of strings
= 2/8
= 0.25
Or 25 percents for a different score
If we need a similar score
We use 1 minus score
= 1 – 0.25
= 0.75
Or 75 % similar score calculated by Levenshtein Distance

Recap !!
We use the concept of Substitution 2 location
In order to correct each character
And that is a cost for the correctness ^^

The more cost for the correctness the far distance between 2 strings
Is it an easy concept of how to compare strings!?

Let’s see another example

  1. Prayut
  2. Payet

In this case, 2 strings are of different length
Prayut >> 6 unit
Payet >> 5 unit

Let’s compare one by one
But this case, we have 2 scenarios
Scenario 1
Step 1
P and P >> same character get 0 point
Step 2
r and a !! >> different character get 1 point (Substitution r and a)
BUT !! WAIT !!!
If we check on step 3 of Prayut >> a
So ! this step we use the property of Insertion
We have
Prayut
P_ayet

If we insert “” character between P and a Instep 3 we will compare a on Prayut And a on P_ayet With apply property Step 2 r and !! >> different character get 1 point (Insertion)

Now step 3
a and a >> same character get 0 point
step 4
y and y >>same character get 0 point
step 5
u and e >> different character get 1 point (Substitution y and w)

step 6
t and t >> same character get 0 point

After that, we compute the score by
sum(point) / length of strings
= 2/8
= 0.25
Or 25 percents for a different score
If we need a similar score
We use 1 minus score
= 1 – 0.25
= 0.75
Or 75 % similar score calculated by Levenshtein Distance

With Levenshtein Distance
It is very useful in NLP applications ^^

Exercise
Let’s calculate Levenshtein Distance if

  1. PrayatINWZa007
  2. PrawitINWZaaIO

** Remark **
Score of Levenshtein Distance
If there are many points of correctness
Levenshtein Distance care the only minimum of points of correctness
For example
If we compare strings and
There are 3 ways for correct strings
Way 1 cost 3 point
Way 2 cost 2 point
Way 3 cost 4 point
We pick 2 point for calculation ^^

Applications on Levenshtein Distance

Example

  • String matching
  • Spell checking
  • Search documents by keywords
  • Check similarity of documents
  • Search chatbot intent
  • Customer profiling
  • Miscellaneous


Thank you my beloved fanpage
Please like share and comment

Made with Love ❤️ by Boyd

This series is designed for everyone interested in data
or work in a data field but is busy.
Content may have a swap between easy and hard.
Combined with Coding, Math, Data, Business, and Misc

  • Do not hesitate to feedback to me 🌟
  • If some content wrong I have to say apologize in advance 🙇‍♂‍
  • If you have experiences in this content, please kindly share it with everyone ^^❤️
  • Sorry for my poor grammar, I will practice more and more 😅
  • I am going to deliver more English content afterward 😀

Follow me 🙂
Youtube: https://youtube.com/c/BigDataRPG
Fanpage: https://www.facebook.com/bigdatarpg/
Medium: https://www.medium.com/bigdataeng
Github: https://www.github.com/BigDataRPG
Kaggle: https://www.kaggle.com/boydbigdatarpg
Linkedin: https://www.linkedin.com/in/boyd-sorratat
Twitter: https://twitter.com/BoydSorratat
GoogleScholar: https://scholar.google.com/citations?user=9cIeYAgAAAAJ&hl=en

#BigDataRPG #DataScienceDaily #LevenshteinDistance

Day 05 – Cosine Similarity

I am writing the data series on a daily basis
1 year we will have 365 data stories for reading ^^

=========================
Cosine !! What you are thinking about ?=========================

Can you remember that you learnt on secondary school year 4 !?
So…. What is it !? Trigonometry !!
Sin(x), Cosine(x), Tan(x)
Is that’s right !?

On the day 4.
I am talking about Minkowski Distance
Have you remenbered Euclidean distance
and how to calculate a height of building
by using Trigonometry

Yes ! today I am talking about one of a measure function
called Cosine Similarity

If you can remember
This Euclidean distance and that Trigonometry
Let’s go to see how Cosine Similarity work !>>>
If not, Don’t worry about it
You can learn more on day 4
I provide on the link below

Link: https://bigdatarpg.com/2021/01/09/day-04-minkowski-distance/

===========
Cosine Similarity
===========

Who used to use it before, Raise your hands up ^^ !!
The easy way to explain this system is
the measure that compare similarity of 2 vectors
by looking at angle between 2 vectors !

Ok That’s means this system require 2 vectors
Lets’ example
If there are 3 vectors
vector A, vector B, and vector C

(the result range of cosine similarity is between [0, 1]In some case has minus that’s means opppsite)

Check how similar
A and B = 0.5
A and C = 0.2
B and C = 0.7

Which pair is the most similar and
which one is the most not similar ?

OK Let’s see how to interprete !!
If result show that equal 1
that’s means 2 vectors are in the same line
they have 0 degree angle with together

If result show that equal 0
that’s means 2 vectors are not in the same line
they have 90 degree angle with together

If result show that equal -1
that’s means 2 vectors are in the same line
but they are 180 degree angle with together
one vector is the oppsite with another vector

Back to the result and question
Which pair is the most similar and
which one is the most not similar ?

So we get
B and C = 0.7 Very similar
A and B = 0.5 Similar but not much !
A and C = 0.2 That is not quite similarIs it easy Right !? 😀

==================
Calculate Cosine Similarity
==================

Let’s see the example
If we have 3 customer

customer A, B, C
and each customer has 3 Features
Feature location
Feature education
Feature flag active customer

customer A = [Bangkok, Undergraduate, Y]
customer B = [Nonthaburi, Undergraduate, Y]
customer C = [Bangkok, Master, N]

We have to transform data from text to numerical
If we set Bangkok = 0, Nonthaburi = 1
Undergraduate = 0, Master = 1
N = 0, Y = 1

Now we have
customer A = [0, 0, 1]
customer B = [1, 0, 1]
customer C = [0, 1, 0]

Let’s see Features
It look like axis location as x-axis
education as y-axis
flag active customer as z-axis

combine into 1 vector of 1 customer

From Cosine Similarity
Sim(A,B) = Cos(degree) = (A dot B) / (||A|| * ||B||)

where
||A|| is Euclidean norm
||A|| = sqrt(x1**2 + x2**2 + … + xn**2)

Let’s calculate Euclidean distance
Euclidean distance(A, B) = sqrt(0**2 + 0**2 + 1**2) * sqrt(1**2 + 0**2 + 1**2)
Euclidean distance(A, C) = sqrt(0**2 + 0**2 + 1**2) * sqrt(0**2 + 1**2 + 0**2)
Euclidean distance(B, C) = sqrt(1**2 + 0**2 + 1**2) * sqrt(0**2 + 1**2 + 0**2)

Euclidean distance(A, B) = 1.4142
Euclidean distance(A, C) = 1.0000
Euclidean distance(B, C) = 1.4142

Let’s calculate dot product
What is dot product !???
Sum of product of each axis

So we have
A dot B = (0*1) + (0*0) + (1*1)
A dot C = (0*0) + (0*1) + (1*0)
B dot C = (0*0) + (0*1) + (1*0)

A dot B = 1
A dot C = 0
B dot C = 0

Combine them
Sim(A,B) = 1 / 1.4142
Sim(A,C) = 0 / 0.000
Sim(B,C) = 0 / 1.4142

Sim(A,B) = 0.707
Sim(A,C) = 0.000
Sim(B,C) = 0.000

As a result of Cosine Similarity
We found that
A and B = 0.707 Very similar
A and C = 0.000 It’s 90 deegree absolute different
B and C = 0.000 It’s 90 deegree absolute different

Um the result is quite not meaningful
Because we transform discrete data to numerical data
and we represent binary vector for customer

In this case
If our features has binary
Cosine Similarity can be rewrite to
A simple variation of cosine similarity
named Tanimoto distance
that is frequently used in information retrieval and biology taxonomy

For Tanimoto distance
instead of using Euclidean Norm
When we have binary vector
So we have
Sim(A,B) = (A dot B) / (A dot A) + (B dot B) – (A dot B)

=====================
Applications on Cosine Similarity
=====================

Example
– Clustering discrete data
– Check similarity of chemical molecule
– Clustering on continuous data
– Clustering customers
– Search documents by kewords
– Recommendation engine
– Check similarity of documents
– Search chatbot intent
– Check similarity of image
– Customer profiling
– Miscellaneous

===========================
Thank you my beloved fanpage
Please like share and comment
Made with Love ❤️ by Boyd
===========================

This series is designed for everyone who are interested in dataor work in data field that are busy.Content may have swap between easy and hard.Combined with Coding, Math, Data, Business, and Misc- Do not hesitate to feedback me 🌟

– If some content wrong I have to say apologize in advance 🙇‍♂️
– If you have experiences in this content, please kindly share to everyone ^^ ❤️
– Sorry for my poor grammar, I will practice more and more 😅
– I am going to deliver more english content afterward 😀

Follow me 🙂

Youtube: https://youtube.com/c/BigDataRPG
Fanpage: https://www.facebook.com/bigdatarpg/
Medium: https://www.medium.com/bigdataeng
Github: https://www.github.com/BigDataRPG
Kaggle: https://www.kaggle.com/boydbigdatarpg
Linkedin: https://www.linkedin.com/in/boyd-sorratat
Twitter: https://twitter.com/BoydSorratat
GoogleScholar: https://scholar.google.com/citations?user=9cIeYAgAAAAJ&hl=en

#BigDataRPG #DataScienceDaily #CosineSimilarity

Day 04 – Minkowski Distance

ลองเขียน Data Series วันละตอนเนาะ
ครบ 1 ปีเราจะมี 365 เรื่องให้อ่านกัน ^^

** English content will be available soon **

=======================
ถ้าพูดถึง พีทาโกรัส คุณนึกถึงอะไร !?
=======================

เมื่อพูดถึงพีทาโกรัส หลายคนคงร้องอี๋ 😱
แต่หลายๆคนกลับขอบคุณบุคคลสำคัญคนนี้
ที่ช่วยให้การประมาณค่าต่างๆเป็นเรื่องที่ง่ายขึ้นมากๆ
ถ้าใครคุ้นๆเจ้าสามเหลี่ยมมุมฉากที่เราเรียนกันตั้งแต่ ม 4
จะพบว่าทฤษฎีบทของพีทาโกรัสที่ว่าด้วย

ในสามเหลี่ยมมุมฉากใด ๆ
พื้นที่ของสี่เหลี่ยมจัตุรัส
ที่มีด้านเป็นด้านตรงข้ามมุมฉาก
เท่ากับผลรวมพื้นที่ของสี่เหลี่ยมจัตุรัสที่มีด้านเป็นด้านประชิดมุมฉาก
ของสามเหลี่ยมมุมฉากนั้น

หรือสามารถเขียนเป็นสมการง่ายๆได้ว่า
a**2 + b**2 = c**2
โดยที่ a และ b แทนขนาดของด้านสามเหลี่ยมที่ประกอบเป็นมุมฉาก
และ c แทนขนาดของด้านสามเหลี่ยด้านตรงข้ามมุมฉาก
โดยที่แอดขอเขียนสัญลักษณ์ ยกกำลังด้วย **

ดังนั้นหากเราต้องการหาค่า c
หรือความยาวของด้านตรงข้ามมุมฉาก
เราก็สามารถทำได้ง่ายๆเพียงถอดรากที่สองของสมการ
ได้เป็น
sqrt(a**2 + b**2) = c
โดยที่ แอดขอเขียนสัญลักษณ์ การถอดรากที่สอง
ด้วยการเขียนฟังก์ชันแบบนี้ sqrt(x)

แล้วมันเกี่ยวอะไรกับการวัดระยะล่ะ !??

เราสามารถใช้ทฤษฎีบทของพีทาโกรัส
มาช่วยในการวัดสิ่งของที่มีความสูงมากๆ
เช่น ต้นไม้ ภูเขา หรือตึก
เริ่มต้นให้เรายืนทำมุม 45 องศา
กับยอดของสิ่งที่เราต้องการวัดความสูง
เช่นเราอยากวัดความสูงของตึก
เราก็เดินถอยออกมาจากตัวตึกเรื่อยๆ
จนกระทั่งแหงนหน้ามองดาดฟ้าของตึกแล้วทำมุม 45 องศา
ณ ตอนนี้เราสามารถรู้มุมแบบคร่าวๆว่าคือ 45 องศา
ระยะทางที่เราเดินมาจนแหงนหน้ามองตึกได้
และแน่นอนความสูงของตึกทำมุม 90 องศากับพื้นถนน
ได้รูปสามเหลี่ยมละ !!
หลังจากนั้นเราก็สามารถแทนค่าเพื่อหาความสูงของตึกได้

คำนวน
ตึกสูง x เมตร
ระยะห่างเรากับตึก y เมตร
ระยะระหว่างเรากับยอดตึก z เมตร
สามเหลี่ยมที่มี มุม 90 องศา และ 45 องศา
แสดงว่ามุมที่เหลือคือ 45 องศา
เพราะมุมภาพในของสามเหลี่ยมรวมกันต้องได้ 180 องศา

การที่สามเหลี่ยมจะมี 2 มุมที่เท่ากันได้
จะต้องมีด้านประกอบของสามเหลี่ยมที่มีขนาดเท่ากัน
หรือ x มีค่าเท่ากับ y
(ในกรณีนี้สามารถตอบได้เลยว่าตึกสูงเท่าไหร่ !!
โดยวัดระยะที่เราเดินห่างออกไปเรื่อยๆเท่านั้นเอง)

แต่ถ้าใช้ทฤษฎีบทของพีทาโกรัส
จะได้ว่าจากสูตรตรีโกณของ sin cos tan
โดยที่
sin(มุม) = ด้านตรงข้ามมุม / ด้านตรงข้ามมุมฉาก
cos(มุม) = ด้านที่ชิดมุม / ด้านตรงข้ามมุมฉาก
tan(มุม) = ด้านตรงข้ามมุม / ด้านที่ชิดมุม

ณ ตอนนี้เราต้องการทราบความสูงตึก
หรือด้านที่ตรงข้ามเรา
เลือกสูตร
tan(มุม) = ด้านตรงข้ามมุม / ด้านที่ชิดมุม
แทนค่า
tan(45) = ด้านตรงข้ามมุม / y

ดังนั้นความสูงของตึกจะมีค่าเท่ากับ
ด้านตรงข้ามมุม = y * tan(45)

แทนค่า
ถ้าระยะระหว่าง เรากับตึก เท่ากับ 10 เมตร
tan(45) = 1
ด้านตรงข้ามมุม = 10 * tan(45)

ดังนั้น คำตอบความสูงของตึกเท่ากับ 10 เมตรนั่นเอง 😀

พีทาโกรัสเกิด 582 ก่อนคริสต์ศักราช
ที่เมืองซามอส (Samos) ประเทศกรีซ (Greece)

==========================
Euclidean Distance คุ้นๆกันไหมเอ่ย !?
==========================

Euclidean Distance คือการวัดระยะ
หรือสิ่งของจากการดู Delta หรือความต่างกันของแต่ละแกน
ซึ่งคล้ายกับการคำนวณหาขนาดของ Manhattan Distance มากๆ

จากตัวอย่างเดิมของ Manhattan Distance
หรือ L1-Norm Distance
สมมติ
X มีขนาด 10 หน่วย
Y มีขนาด 5 หน่วย
เราสามารถเขียนในรูป Vector ได้ว่า
v = [ 10, 5 ]
ทีนี้ขนาดของ Vector นี้หาได้จากการหา Delta ทีละแกน
โดยทำการเทียบระยะทางกับจุดกำเนิด หรือจุด (0, 0)
จะสามารถแทนค่าสมการได้ดังนี้
(10 – 0) + (5 – 0) = 15

สังเกตได้ว่าอีกหนึ่งจุดที่เรียกวิธีนี้ว่า L1-Norm
นั่นคือการที่แต่ละพจน์ หรือแต่ละแกนที่คำนวนนั้น
ถูกยกกำลังด้วย 1
(10 – 0) + (5 – 0) = 15
เขียนใหม่ได้เป็น
(10 – 0)**1 + (5 – 0)**1 = 15**1

สำหรับ Euclidean Distance นั้น
คำนวณผ่าน L2-Norm
จากตัวอย่างเดิม
v = [ 10, 5 ]
เราสามารถหาระยะทางแบบ Euclidean Distance ได้จาก
(10 – 0)**2 + (5 – 0)**2 = || v ||**2
ทำการถอดรากที่สอง
sqrt((10 – 0)**2 + (5 – 0)**2) = || v ||

ดังนั้นหากคำนวนหาขนาดของ v แบบ L2-Norm
จะได้ค่าประมาณ 11.18

สูตรคล้ายๆกับทฤษฎีบทของพีทาโกรัสใช่ไหมเอ่ย ^^ 😀

งั้นเราก็สามารถเขียนสูตรใหม่ได้เป็น
sqrt((x – 0)**p + (y – 0)**p) = z
โดยที่ p = ตัวแทนของ Dimension Space !!

p = 1 จะได้ Manhattan Distance
p = 2 จะได้ Euclidean Distance

Euclidean Distance นั้นชื่อตามตัวเลยครับ
มาจากนักคณิตศาตร์ที่ชื่อ ยุคลิด
ยูคลิดเกิดที่เมืองอเล็กซานเดรีย ประเทศอิยิปต์
365 ปีก่อนคริสตกาล

================
Minkowski Distance
================

เรารู้จักการวัดระยะผ่านระบบของ Function spaces
หรือ Lp-Norm
แต่สำหรับ Minkowski Distance นั้น
เพิ่มความพิเศษด้วยการยกกำลัง Delta ของแต่ละแกน
โดยยกกำลังตามจำนวนค่า Norm ที่เราต้องการ
แล้วทำการรวมค่าผลลัพธ์เข้าด้วยกัน
จากนั้นทำการถอดรากที่ได้ทำการยกกำลังไป


เช่น
หากยกกำลัง 3 ที่ทุกจุดของข้อมูล
เราก็มาถอดรากที่ 3 ในภายหลัง
แต่หากทำการยกกำลัง 10
เราก็มาถอดรากที่สิบในภายหลังเช่นเดียวกัน

ซึ่งแน่นอนว่า p นั้นสามารถไล่ไปได้ถึง Infinity !
แต่การจะเห็นภาพนั้นคงจะค่อนข้างยากหน่อย
แต่ถ้าเราค่อยๆคิดถึงระยะทางที่พาดผ่าน
ตั้งแต่
p = 1 คือระยะทางของเราที่สามารถวิ่งไปได้แค่ทีละแกนเท่านั้น
p = 2 คือระยะทางของเราที่สามารถวิ่งไปได้ทีละ 2 แกน

ดังนั้นสำหรับ p ที่มากขึ้นเรื่อยๆ
จำนวนแกนที่สามารถวิ่งได้ก็เพิ่มขึ้นเรื่อยๆ ด้วยเช่นเดียวกัน

จากตัวอย่างด้านบนเราเทียบ Vector กับจุดกำเนิด
แต่ในการใช้งานในมุมของ Data Science นั้น
เราใช้เปรียบเทียบ หรือวัดระยะห่าง
ของ 2 Vectors
โดย แต่ละ Vector เปรียบเสมือนเป็นตัวแทน ลูกค้า 1 คน
ดังนั้นเราสามารถเปรียบเทียบระยะความใกล้ หรือไกล
ของลูกค้าแต่ละคนได้โดยการหาขนาดของระยะห่างนั่นเอง

==============================
Minkowski กับการใช้งานใน Business
==============================

ตัวอย่างการคำนวณค่าความเหมือนของลูกค้าแต่ละคน
เช่น
นาย A มี vector = [2, 0, 1]
นาย B มี vector = [1, 2, 0]
นาย C มี vector = [0, 2, 1]

โดยที่ค่าใน vector นั้นเป็นตัวแทนของ Features ของลูกค้า
Features อาจจะมองว่าเป็นลักษณะของลูกค้า
ซึ่งอาจจะเป็น ส่วนสูง, น้ำหนัก, การซื้อของ
โดยที่เราจะมอง 1 Feature เปรียบเสมือนข้อมูล 1 แกน
(บางคนก็ใช้คำว่า 1 มิติ หรือ 1 column)

เอาล่ะ เริ่มคำนวณ Minkowski Distance ที่ p = 2
หรือ Euclidean Distance กัน
โดยคำนวนหา Delta ของแต่ละแกน
นาย A มีระยะห่างจาก นาย B
= sqrt((2-1)**2 + (0-2)**2 + (1-0)**2)
= 1.414 หน่วย

นาย A มีระยะห่างจาก นาย C
= sqrt((2-0)**2 + (0-2)**2 + (1-1)**2)
= 2 หน่วย

และนาย B มีระยะห่างจาก นาย C
= sqrt((1-0)**2 + (2-2)**2 + (0-1)**2)
= 1.414 หน่วย

จะได้่ผลลัพธ์ดังนี้
นาย A มีระยะห่างจาก นาย B = 1.414 หน่วย
นาย A มีระยะห่างจาก นาย C = 2 หน่วย
นาย B มีระยะห่างจาก นาย C = 1.414 หน่วย

ดังนั้นถ้าเทียบลักษณะของ ลูกค้าทั้งสามคนนี้
เราก็สามารถบอกได้ว่า
นาย A มีลักษณะใกล้เคียงกับ นาย B แต่ ไม่เหมือน นาย C
และนาย B เองก็อยู่ลักษณะใกล้เคียงกับนาย C ด้วยเช่นกัน

จะเห็นได้ว่า
ระยะห่างของ (A, B) = ระยะห่างของ (B, C)

แต่ แต่ แต่ แต่ แต่ แต่ แต่ แต่ แต่ !

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

ง่ายแค่นี้เองครัช 🤔🙃

Minkowski เป็นชาวเยอรมันมีชีวิตในช่วง 1864-1909
เป็นทั้งนักคณิตศาสตร์ และนักฟิสิกส์
แถมยังเป็นอาจารย์ของ Einstein
และด้วย Minkowski Distance นี่เอง
นำไปสู่รากฐานของทฤษฎีสัมพันธภาพ
ที่อธิบายเรื่องราวของ Space–Time
โดยต่อมาเป็นที่รู้จักกันในชื่อ “Minkowski spacetime”

================
อธิบายศัพท์เพิ่มเติม
================

Delta คือการหาระยะห่าง
หรือความแตกต่างของข้อมูลเทียบกัน
เช่น Delta(X2, X1) คือนำ X2 มาลบ กับ X1

Gradient คืออัตราการเปลี่ยนแปลงของฟังก์ชัน
เช่น ฟังก์ชัน f(X) โดยที่ X เปลี่ยนแปลงน้อยๆ
จะได้ d(f(x)) / dx
โดยที่เรียก d(f(x)) / dx ได้อีกชื่อว่า Slope นั่นเอง
ยกตัวอย่างเช่น อัตราการเปลี่ยนแปลงของความเร็วรถ
จาก ตำแหน่ง x1 ไปยัง x2
แสดงว่าระยะทางมีการเพิ่มขึ้น = x2-x1
โดยเทียบกับ เวลาที่เปลี่ยนแปลงไปชั่วขณะหนึ่ง
และ Gradient ของความเร็วที่เปลี่ยนแปลง
ต่อ เวลาที่เปลี่ยนแปลงชั่วขณะหนึ่ง ก็คือ ความเร่งนั่นเอง

=========================
ประโยชน์ของ Minkowski Distance
=========================

อาทิเช่น
– ศึกษาและ อธิบายทฤษฏีสัมพันธภาพ
– ใช้ในระบบการแก้สมการที่มี Infinite Solution
(Underdetermined systems)
– ใช้การการคำนวณเล่นหมากรุก !
– ดูความแตกต่างของข้อมูลกลุ่ม Discrete
– ตรวจดูความแตกต่างของรูปร่างโมเลกุล
– การค้นหาคนที่มีพฤติกรรมเหมือนกลุ่มใดกลุ่มหนึ่ง
– การนำเสนอสินค้าที่ใกล้เคียงกับคนแต่ละกลุ่ม
– Classification Model เช่น KNN ใช้การวัดระยะห่างเข้ามาช่วยทำนาย
– การจัดกลุ่มลูกค้า
– หาความคล้ายกันของชื่อคน
– เช็คคุณภาพของข้อความ
– การค้นหาเอกสาร
– การค้นหา Intent ของ Chatbot
– เช็คความเหมือนกันของรูปภาพ
– การค้นหาคนที่มีพฤติกรรมเหมือนกลุ่มใดกลุ่มหนึ่ง
– การแนะนำสินค้าโดยอิงจากความใกล้เคียงกันของกลุ่ม
– การส่งแคมเปญการตลาดให้แต่ละกลุ่ม
– การทำโปรไฟลล์ลูกค้า
– ใช้เป็น 1 ใน ตัววัดประสิทธิภาพโมเดลในโจทย์ปัญหา Multilabel-Classification
– และอื่นๆอีกมากมาย

=========================
ขอบคุณทุกท่านที่ติดตามครับ
ฝากไลค์ แชร์ คอมเมนท์ เพื่อเป็นกำลังใจ
Made with Love ❤️ by Boyd
=========================

Series นี้ออกแบบมาให้เพื่อนๆที่สนใจในเรื่องของ Data หรือเพื่อนๆที่ทำงานสาย Data แต่มีเวลาจำกัดได้อ่านกันครับ โดยเนื้อหาอาจจะมีสลับกันไปทั้งในเรื่องของความง่าย และยาก รวมถึงเนื้อหาที่หลากหลายทั้ง Coding, Math, Data, Business, และ Misc
– Feedback กันเข้ามาได้นะครับ ว่าชอบหรือไม่ชอบอย่างไร เพื่อการปรับปรุง Content ให้ดียิ่งขึ้น
– หากผิดพลาดประการใดต้องขออภัยมา ณ ที่นี้ด้วยนะครับ
– ท่านใดมีประสบการณ์การใช้งาน สามารถแชร์ให้เพื่อนๆอ่านได้เลยนะครับ

#BigDataRPG#DataScienceวันละตอน#MinkowskiDistance

Day 03 – Manhattan Distance

ลองเขียน Data Series วันละตอนเนาะ ครบ 1 ปีเราจะมี 365 เรื่องให้อ่านกัน ^^

==============================
ถ้าพูดถึง Manhattan เรานึกถึงอะไร !? 🤔
==============================

บางท่านอาจจะนึกถึงย่านที่ผู้คนต่างดื่มกาแฟกันอย่างหนักหน่วง
ถึงมีการเล่าว่ากลิ่นในแม่น้ำ Manhattan นั้นเต็มไปด้วยกลิ่นกาแฟ
(ที่มาจากกลุ่มลูกค้าที่ไปปลดทุกข์เบากันนี่แหละ 😱 !!!! )

ถ้าเป็นในเรื่องของ Data หลายๆคนคงเคยได้ยิน
ฟังก์ชันที่ใช้ในการคำนวณระยะทางของรถแทกซี่ที่วิ่งจากที่หนึ่งไปยังอีกที่หนึ่งซึ่งเราคำนวนระยะห่างของ Taxi กับเป้าหมาย
ได้โดยการวัดระยะของแยกต่างๆ
และแยกนั้นไม่ใช่ที่ไหน
นั่นคือเมือง Manhattan นั่นเองครับ !
ซึ่งเมือง Manhattan เนี่ยมีผังเมืองที่เป็นคล้ายๆ Grid
แยกเยอะแยะเต็มไปหมด
และเป็นหนึ่งในเมืองที่ใหญ่มากๆๆๆ
ใหญ่แค่ไหนไปชมกันที่ link ด้านล่าง

Link: ภาพเมือง Manhattan Link

ทีนี้เวลาเค้าวัดระยะ เค้าใช้จำนวนแยกเป็นตัววัดระยะทางไง !
ถ้ารถ Taxi กับ เป้าหมายอยู่ห่างกัน 5 แยก
เราก็คำนวณระยะห่างง่ายๆได้ว่าระยะห่าง เท่ากับ 5 หน่วย
และเป็นที่มาของวิธีวัดที่ชื่อว่า Manhattan Distance
ในทางคณิตศาสตร์นั้น Manhattan Distance
จัดอยู่ในหมวดของการวัดระยะห่างชนิดที่เรียกว่า
L1 distance หรือ L1-Norm Distance
ซึ่งการจะทำความเข้าใจวิธีวัดในรูปแบบคณิตศาสตร์นั้น
แอดเองขอเกริ่นแบบง่ายๆละกันนะครับ
เพราะจะต้องเข้าใจในเรื่องของ

พีชคณิตเชิงเส้นหรือ Linear Algebra !!! 🙃

เรียนกัน ม4. ไง ทำเป็นจำไม่ได้ !!!!!!!!!!!!!!!!

================
Manhattan Distance
================

เอาล่ะเริ่มจินตนาการภาพตามแอดนะ
จินตนาการว่าเราเป็นนกกำลังบินบนท้องฟ้า
แล้วมองผังเมืองจากด้านบนลงมา
เราจะเห็นผังเมืองเป็นเหมือนสี่เหลี่ยมที่มีขนาดใหญ่มากๆๆๆ !!
จากนั้นจินตนาการต่อถึงรถ Taxi คันหนึ่งจอดอยู่
และที่อีกฝากหนึ่งของเมือง
ก็มีคนกำลังรอรถ Taxi

ถ้าเราเป็นคนขับ Taxi เราจะต้องทำอย่างไรถึงไปรับลูกค้าได้ !?

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

ถ้าลูกค้าอยู่ข้างหน้าเราแล้วห่างไป 5 ช่วงตึก หรือห่างประมาณ 5 แยก
แสดงว่าระยะเรากับลูกค้าจะเท่ากับ 5

วัดระยะง่ายๆแบบนี้เลยแหละเอ้า

แล้วถ้าลูกค้าอยู่คนละทิศของเมืองเลยล่ะ !?

ยังเก็บภาพเมืองในมุมสูงได้อยู่ใช่ไหมครับ
ภาพด้านล่างที่เราเห็น ถนน คงคล้ายกับ
เส้นที่เทียบได้กับเส้น แกน X และ แกน Y
แกน X เหมือนเส้นถนนที่ลากจากซ้าย ไป ขวา
แกน Y เหมือนเส้นถนนที่ลากจากล่าง ขึ้น บน

เอาล่ะ ถ้าผู้โดยสารเราอยู่ที่ขอบมุมบนขวาของเมือง
และเราขับ Taxi อยู่มุมล่างซ้ายของเมือง

ระยะทางที่สั้นที่สุดที่เราจะไปหาผู้โดยสารได้ เป็นเท่าไหร่
หรือระยะห่างระหว่างเรากับผู้โดยสาร เป็นเท่าไหร่เอ่ย ??

เราก็คงต้องค่อยๆขับรถไปทางขวาเรื่อยๆ
จนสุดขอบของเมือง
ระหว่างนั้นเราก็นับระยะไปด้วย
ว่าขับผ่านไปแล้วกี่ช่วงตึก
เช่นถ้านับช่วงตึกได้ 10 ช่วงตึก
ก็เท่ากับเราเดินทางไปในแกน X = 10 หน่วยด้วยกัน
หลังจากนั้นเราจึงขับรถต่อขึ้นไปด้านบนจนสุดขอบ
ก็จะพบผู้โดยสารที่รอเราอยู่ที่มุมบนขวาของเมือง
ณ จุดนี้เราทำการนับช่วงตึกเช่นเดียวกันถ้านับได้ 5 ช่วงตึก
แสดงว่า เราเดินทางไปในแกน Y = 5 หน่วยด้วยกัน
ดังนั้นผลรวมของระยะทางช่วงตึกทั้งหมด
จะนำมารวมกันเป็นระยะห่างระหว่าง Taxi ไปยังผู้โดยสารนั่นเอง
หรือ X = 10 บวกกับ Y = 5 ผลลัพธ์คือ 15 หน่วยนั่นเองครับ 😀

แล้ว L1-Norm ล่ะ คืออะไรหว่า !?

เป็นเหมือนการหาขนาดของ Vector นั่นเองครับ
แต่ขนาดของ Vector ของ L1-Norm นั้นหาได้จาก
สมมติ X มีขนาด 10 หน่วย
Y มีขนาด 5 หน่วย
เราสามารถเขียนในรูป Vector ได้ว่า
v = [ 10, 5 ]
แล้วขนาดของ Vector แบบ L1-Norm หรือ Manhattan Distance
ก็คือการนำแต่ละค่า ในแต่ละแกน
มาลบกับจุดกำเนิดจุดกำเนิดคือจุด 0, 0 ตามที่เราเรียนมานั่นเอง
ถ้ามี 2 แกน ก็เขียน 0, 0
ถ้ามี 5 แกน ก็เขียน 0, 0, 0, 0, 0
ทีนี้เราค่อยๆวัดระยะห่างทีละแกนของ Vector
เทียบกับจุดกำเนิด
Delta ของ X
หรือระยะของ X จะได้ค่าเท่ากับ
Delta ของ X = 10 – 0 = 10
และ
Delta ของ Y = 5 – 0 = 5
หลังจากนั้นจึงนำค่า Delta ที่ได้ของแต่ละแกนมาทำการบวกรวมกัน
เป็นคำตอบของ การหาขนาด Vector ด้วยวิธี L1-Norm นั่นเองครับ 🙃

แค่จะขับรถ Taxi ไปรับผู้โดยสารยังเกิดเป็นฟังก์ชันในการหาระยะทางได้

==============
อธิบายศัพท์เพิ่มเติม
==============

Delta คือการหาระยะห่าง
หรือความแตกต่างของข้อมูลเทียบกัน
เช่น Delta(X2, X1) คือนำ X2 มาลบ กับ X1

Gradient คืออัตราการเปลี่ยนแปลงของฟังก์ชัน
เช่น ฟังก์ชัน f(X) โดยที่ X เปลี่ยนแปลงน้อยๆ
จะได้ d(f(x)) / dxโดยที่เรียก d(f(x)) / dx ได้อีกชื่อว่า Slope นั่นเอง
ยกตัวอย่างเช่น
อัตราการเปลี่ยนแปลงของความเร็วรถ จาก ตำแหน่ง x1 ไปยัง x2
แสดงว่าระยะทางมีการเพิ่มขึ้น = x2-x1
โดยเทียบกับ เวลาที่เปลี่ยนแปลงไปชั่วขณะหนึ่ง
และ Gradient ของความเร็วที่เปลี่ยนแปลง
ต่อ เวลาที่เปลี่ยนแปลงชั่วขณะหนึ่ง ก็คือ ความเร่งนั่นเอง

=========================
ประโยชน์ของ Manhattan Distance
=========================

อาทิเช่น
– ใช้ในระบบการแก้สมการที่มี Infinite Solution(Underdetermined systems)
– ใช้การการคำนวณเล่นหมากรุก !
– ดูความแตกต่างของข้อมูลกลุ่ม Discrete
– ตรวจดูความแตกต่างของรูปร่างโมเลกุล
– การค้นหาคนที่มีพฤติกรรมเหมือนกลุ่มใดกลุ่มหนึ่ง
– การนำเสนอสินค้าที่ใกล้เคียงกับคนแต่ละกลุ่ม
– Classification Model เช่น KNN ใช้การวัดระยะห่างเข้ามาช่วยทำนาย
– และอื่นๆอีกมากมาย

=========================
ขอบคุณทุกท่านที่ติดตามครับ
ฝากไลค์ แชร์ คอมเมนท์ เพื่อเป็นกำลังใจ
Made with Love ❤️ by Boyd
=========================

Series นี้ออกแบบมาให้เพื่อนๆที่สนใจในเรื่องของ Data
หรือเพื่อนๆที่ทำงานสาย Data แต่มีเวลาจำกัดได้อ่านกันครับ
โดยเนื้อหาอาจจะมีสลับกันไปทั้งในเรื่องของความง่าย และยาก
รวมถึงเนื้อหาที่หลากหลายทั้ง Coding, Math, Data, Business, และ Misc- Feedback กันเข้ามาได้นะครับ ว่าชอบหรือไม่ชอบอย่างไร
เพื่อการปรับปรุง Content ให้ดียิ่งขึ้น

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

#BigDataRPG#DataScienceวันละตอน#ManhattanDistance

DAY 02 – Jaccard Similarity

เกริ่นนำ :

ลองเขียน Data Series วันละตอนเนาะ
ครบ 1 ปีน่าจะมี 365 เรื่อง ^^
เป็นเรื่องสั้นๆ อาจจะไม่ยาวมากนะครัช
แต่อ่านแล้วน่าจะเห็นภาพ และการนำไปใช้งานได้บ้าง

=========================
ว่าด้วยการวัดข้อมูลที่เป็น Set กันบ้าง
=========================

ในงานด้าน Data Science หรือด้าน Data ที่เกี่ยวข้องหลายคน
อาจจะรู้จักเครื่องมือ หรือ ฟังก์ชันที่ใช้วัดระยะมาหลากหลายตัว
บางตัวสามารถวัดระยะกับข้อมูลที่เป็น ตัวเลขได้
บางตัวสามารถวัดระยะกับข้อมูลที่ไม่ใช่ตัวเลขได้
อย่างเช่นที่เรารู้จักไปก่อนหน้า
นั่นคือ Hamming Distance
ซึ่งช่วยเราวัดระยะ หรือวัดความเหมือน หรือความแตกต่างของแต่ละคนได้
แต่ Hamming Distance นั้นเราต้องแปลงข้อมูลให้เป็น Binary
และข้อมูลที่เปรียบเทียบนั้นต้องมีขนาดเท่ากัน
หลังจากนั้นถึงสามารถทำข้อมูลมาวัดความเหมือน หรือความแตกต่างกันได้

แต่ถ้าข้อมูลของเราไม่ได้เป็น Binary ล่ะ !???

ยกตัวอย่างเช่น
หากข้อมูลที่เรามีเป็นแบบนี้
นาย A ซื้อสินค้า { แอปเปิ้ล }
นาย B ซื้อสินค้า { ส้ม, กล้วย }
นาย C ซื้อสินค้า { แอปเปิ้ล, ส้ม }
(คล้ายๆ เดิมเลยเนาะ) ! 🤨

============
Jaccard Similarity
============


ทีนี้เวลาเราหาระยะห่างโดยใช้ Jaccard Similarity
เราจะใช้เรื่องของ Set เข้ามาช่วยในการคำนวนจากสูตร
J(A,B) = | Intersect(A, B) | / | Union(A, B) |

ทำความเข้าใจสูตรกันก่อน
| Intersect(A, B) |
คือดูว่าข้อมูลของนาย A และนาย B มีสินค้าไหนที่เหมือนกันบ้าง
และมีจำนวนกี่ชิ้น โดยนับแบบ Unique item คือไม่นับตัวซ้ำ

| Union(A, B) |
คือดูว่าข้อมูลของนาย A และนาย B มีข้อมูลรวมกันจำนวนกี่ชิ้นโดยนับแบบ Unique item คือไม่นับตัวซ้ำ และมีจำนวนกี่ชิ้นหลังจากนั้นจึงนำค่าที่ได้จากทั้งคู่มาหารกันเพื่อได้ค่า Jaccard Similarity !!!
แท่น แท่น แท๋นนนนน 😀

มาลองคำนวนกันดู 🙂

นาย A ซื้อสินค้า { แอปเปิ้ล }
นาย B ซื้อสินค้า { ส้ม, กล้วย }
นาย C ซื้อสินค้า { แอปเปิ้ล, ส้ม }


คิดนาย A และ B
| Intersect(A, B) | = 0 (ไม่มีอะไรตรงกันเลย)
| Union(A, B) | = 3 (พบ item 3 ชนิด)
J(A, B) = 0/3 = 0 (นาย A เหมือน นาย B 0%)

คิดนาย A และ C
| Intersect(A, C) | = 1 (ตรงกันแค่แอปเปิ้ล)
| Union(A, C) | = 2 (พบ item 2 ชนิด)
J(A, C) = 1/2 = 0.5 (นาย A เหมือน นาย C 50%)

คิดนาย B และ C
| Intersect(B, C) | = 1 (ตรงกันแค่ส้ม)
| Union(B, C) | = 3 (พบ item 3 ชนิด)
J(B, C) = 1/3 = 0 (นาย B เหมือน นาย C 33.3%)

ถึงจุดนี้มาลองดูผลลัพธ์อีกทีครับ

นาย A, นาย B เหมือนกัน = 0.00 %
นาย A, นาย C เหมือนกัน = 50.0 % 🤨!!
นาย B, นาย C เหมือนกัน = 33.3 %

เห็นความแตกต่างของผลลัพธ์เมื่อเทียบกับ Hamming ไหมเอ่ยครับ !!!

ให้เวลาเพื่อนๆนึกก่อน !!

อันนี้ผลของ Hamming Distance ครับ
นาย A, นาย B เหมือนกัน = 0.00 %
นาย A, นาย C เหมือนกัน = 66.6 %
นาย B, นาย C เหมือนกัน = 33.3 %

นึกออกหรือยังเอ่ย !!

.

.

.

.

งั้นเฉลยละน้าาาา

เราจะเห็นว่า Hamming Distance
เราต้องทำการเรียงข้อมูลแต่ละ item ให้ตรงก่อน
ถูกไหมเอ่ย !
และทำการเช็คแต่ละตำแหน่งว่าตรงกันหรือไม่
ถึงนับเป็นคะแนนความแตกต่าง
และการวัด Hamming Distance นั้นจะต้องวัดจากจำนวน item ที่เท่ากัน
เช่นในระบบของเรามีสินค้า 5 ชิ้น
Array เราก็จะมีขนาด 5
ดังนั้น ส่วนของการคตำนวนจึงเท่ากับ 5
เป็นการคิดความเหมือนโดยอิงจากระบบ Global
หรือมองภาพรวมของระบบ

ส่วน Jaccard Similarity นั้นจะเห็นว่าเป็นการคิดแบบ Set แบบ Pair คู่ จากตัวอย่าง
คิดนาย A และ C | Intersect(A, C) | = 1 (ตรงกันแค่แอปเปิ้ล)
| Union(A, C) | = 2 (พบ item 2 ชนิด)
J(A, C) = 1/2 = 0.5 (นาย A เหมือน นาย C 50%)

จะเห็นว่าพบ item เพียงแค่ 2 ชนิดทำให้ตัวหารมีค่าขนาด Array เพียงแค่ 2
ซึ่งไม่ได้ Represent หรือสื่อถึงจำนวนที่แท้จริงทั้งหมดของระบบ
เช่นถ้าเรามี 5 ก็จะคิดแค่ 2
ซึ่งจริงๆ ถ้าเรารู้ว่าระบบเรามี 5 items
ก็อาจจะ modify สมการของ Union ให้เป็น 5 ได้
(Math ไม่ยากงับ ถ้าเราเข้าใจที่มาก็ modify ได้แบบเข้าใจ)

ทีนี้เราจะเห็นว่า Hamming Distance ข้อมูลต้องจัดในรูป Binary Vector ก่อนส่วน Jaccard Similarity นั้นสามารถคิดได้จาก Set ของ Item โดยตรงเลย
แล้วถ้า Set ของเราไม่ได้เป็นข้อมูลชนิด Discrete ได้ไหม

* Discrete คือข้อมูลที่ไม่ได้เป็นตัวเลขที่หา Ratio ได้
เช่น
จำนวนนักศึกษาในห้อง (นักศึกษาเป็นเศษส่วนไม่ได้)
หรือหน้าของลูกเต๋าที่ทอยออกมาได้ (หน้าลูกเต๋าออกมาเป็น 1/9 ไม่ได้ ถ้าไม่ได้ทอยแรงจนลูกเต๋าแตกอะนะ !)

สำหรับเจ้า Jaccard Similarity
ยังสามารถคำนวนหาความเหมือน หรือแตกต่างกันจากข้อมูลที่เป็น Ratio
ได้ด้วยนะเออ เรียกว่า Probability Jaccard
Link Paper: https://academic.oup.com/sysbio/article-pdf/45/3/380/19501760/45-3-380.pdf
และเจ้าฟังก์ชันวัดความเหมือนนี้ยังมีแตกแยกย่อยอีกมากมายเลยล่ะ 😀

====================
ประโยชน์ของ Jaccard Similarity
====================

อาทิเช่น
– การจัดกลุ่มลูกค้า
– หาความคล้ายกันของชื่อคน
– เช็คคุณภาพของข้อความ
– การค้นหาเอกสาร
– การค้นหา Intent ของ Chatbot
– เช็คความเหมือนกันของรูปภาพ
– การค้นหาคนที่มีพฤติกรรมเหมือนกลุ่มใดกลุ่มหนึ่ง
– การนำเสนอสินค้าที่ใกล้เคียงกับคนแต่ละกลุ่ม
– การแนะนำสินค้าโดยอิงจากความใกล้เคียงกันของกลุ่ม
– การส่งแคมเปญการตลาดให้แต่ละกลุ่ม
– การทำโปรไฟลล์ลูกค้า
– ใช้เป็น 1 ใน ตัววัดประสิทธิภาพโมเดลในโจทย์ปัญหา Multilabel-Classification
– และอื่นๆอีกมากมาย

=========================
ขอบคุณทุกท่านที่ติดตามครับ
ฝากไลค์ แชร์ คอมเมนท์ เพื่อเป็นกำลังใจ
Made with Love ❤️ by Boyd
=========================

Series นี้ออกแบบมาให้เพื่อนๆที่สนใจในเรื่องของ Data
หรือเพื่อนๆที่ทำงานสาย Data แต่มีเวลาจำกัดได้อ่านกันครับ
โดยเนื้อหาอาจจะมีสลับกันไปทั้งในเรื่องของความง่าย และยาก
รวมถึงเนื้อหาที่หลากหลายทั้ง Coding, Math, Data, Business, และ Misc-

Feedback กันเข้ามาได้นะครับ ว่าชอบหรือไม่ชอบอย่างไร
เพื่อการปรับปรุง Content ให้ดียิ่งขึ้น

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

#BigDataRPG #DataScienceวันละตอน #JaccardSimilarity

Day 01 – Hamming Distance

เกริ่นนำ :

ลองเขียน Data Series วันละตอนเนาะ
ครบ 1 ปีน่าจะมี 365 เรื่อง ^^
เป็นเรื่องสั้นๆ อาจจะไม่ยาวมากนะครัช
แต่อ่านแล้วน่าจะเห็นภาพ และการนำไปใช้งานได้บ้าง

==================
ว่าด้วยเรื่องของการวัดระยะ
==================

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

เช่น
นาย A โทรศัพท์ นาน 2 นาที
นาย B โทรศัพท์ นาน 2 นาที 1 วินาที
นาย C โทรศัพท์ นาน 1 นาที

ก็แสดงว่านาย A และ นาย B มีความใกล้กันในมุมมองของเวลาที่ใช้ในการโทรศัพท์

แต่กลับกัน
นาย A และ นาย B มีความไกลกันจากนาย C ในมุมมองของเวลาที่ใช้ในการโทรศัพท์

ทีนี้ถ้าข้อมูลไม่ใช่ตัวเลข เราจะคิดอย่างไรดี !?

ก็คงต้องหา logic ต่างๆมาช่วยหาคำตอบเช่น
หากข้อมูลที่เรามีเป็นแบบนี้
นาย A ซื้อสินค้า { แอปเปิ้ล }
นาย B ซื้อสินค้า { ส้ม, กล้วย }
นาย C ซื้อสินค้า { แอปเปิ้ล, ส้ม }

โดยที่เราสนใจเฉพาะการเกิดของสิ่งของที่ถูกซื้อ
ถ้าเราแทน { แอปเปิ้ล, ส้ม, กล้วย }
ด้วยตัวเลข [ 1, 1, 1 ]
โดยที่เลข 1 แสดงถึงการซื้อสินค้าตำแหน่งนั้นๆไปและเลข 0 แสดงว่าไม่พบข้อมูลการซื้อสินค้าชนิดนั้นๆเราสามารถจัดรูปการเขียนได้ใหม่เป็น
นาย A ซื้อสินค้า [ 1, 0, 0 ]
นาย B ซื้อสินค้า [ 0, 1, 1 ]
นาย C ซื้อสินค้า [ 1, 1, 0 ]

แล้วเราจะวัดอย่างไรต่อดีน้าา !???

=============
Hamming Distance
=============

Hamming Distance เป็นเครื่องมือวัดระยะรูปแบบหนึ่ง
ที่ช่วยเราวัดข้อมูลที่มีลักษณะเป็น Binary Vector หรือ { 0, 1 }
(คือมีข้อมูลแค่ 2 ชนิด ศูนย์ และหนึ่ง)
ดูแล้วก็คล้ายๆกับเลขบิทหรือเลขฐานสองเลยเนาะ !
โดยวิธีการวัดความใกล้กันนั้น
ถ้าข้อมูลของนาย X = [ 1, 1, 1 ]
ถ้าข้อมูลของนาย Y = [ 1, 1, 1 ]
ดูด้วยตาก็คงเทียบได้เลยว่าตรงกันเป๊ะๆ
มี 1 เหมือนกันทั้งค่า และตำแหน่ง

ทีนี้กลับมาดูกันที่ความห่างกันของ นาย A และนาย B กันบ้าง
นาย A = [ 1, 0, 0 ]
นาย B = [ 0, 1, 1 ]
เริ่มต้นโดยทำการ Check ทีละตำแหน่งว่ามีตัวไหนต่างกันบ้าง
ปรากฎว่า ต่างกันทุกตำแหน่งเลย !!!
นาย A, นาย B ต่างกัน = 3

ลองคำนวนทั้งสามคนดู
นาย A, นาย C ต่างกัน = 1
นาย B, นาย C ต่างกัน = 2
ตอนนี้เราก็รู้ละว่าแต่ละคนมีระยะห่างกันเท่าไหร่
นาย A, นาย B ต่างกัน = 3
นาย A, นาย C ต่างกัน = 1
นาย B, นาย C ต่างกัน = 2

ดังนั้นหากเรา เพิ่มการคำนวนเล็กน้อยลองคิดเป็น %
ความเหมือนเราก็สามารถหาได้โดยหาค่าเฉลี่ยความแตกต่างก่อน
โดยนำจำนวน Items ทั้งหมดมาหาร
นาย A, นาย B ต่างกัน = 3/3
นาย A, นาย C ต่างกัน = 1/3
นาย B, นาย C ต่างกัน = 2/3

จะได้
ความแตกต่างโดยเฉลี่ยต่อตำแหน่ง
นาย A, นาย B ต่างกัน = 1.00
นาย A, นาย C ต่างกัน = 0.33
นาย B, นาย C ต่างกัน = 0.66

เราคิดเป็น % ความเหมือนหรือความใกล้กันโดยนำ 1 มาลบ แล้ว คูณ 100
จะได้
นาย A, นาย B เหมือนกัน = 0.00 %
นาย A, นาย C เหมือนกัน = 66.6 %
นาย B, นาย C เหมือนกัน = 33.3 %

และจากประโยชน์ดังกล่าว
เราเองก็สามารถนำไปใช้งานในมุมมองอื่นๆต่อได้อีกเยอะเลย
อาทิเช่น

– การจัดกลุ่มลูกค้า
– การค้นหาคนที่มีพฤติกรรมเหมือนกลุ่มใดกลุ่มหนึ่ง
– การนำเสนอสินค้าที่ใกล้เคียงกับคนแต่ละกลุ่ม
– การแนะนำสินค้าโดยอิงจากความใกล้เคียงกันของกลุ่ม
– การส่งแคมเปญการตลาดให้แต่ละกลุ่ม
– การทำโปรไฟลล์ลูกค้า
– ใช้เป็น 1 ใน ตัววัดประสิทธิภาพโมเดลในโจทย์ปัญหา Multilabel-Classification
– ใช้วัด Error จากการสื่อสาร
– และอื่นๆอีกมากมาย

=========================
ขอบคุณทุกท่านที่ติดตามครับ
ฝากไลค์ แชร์ คอมเมนท์ เพื่อเป็นกำลังใจ
Made with Love ❤️ by Boyd
=========================

Series นี้ออกแบบมาให้เพื่อนๆที่สนใจในเรื่องของ Data
หรือเพื่อนๆที่ทำงานสาย Data แต่มีเวลาจำกัดได้อ่านกันครับ
โดยเนื้อหาอาจจะมีสลับกันไปทั้งในเรื่องของความง่าย และยาก
รวมถึงเนื้อหาที่หลากหลายทั้ง Coding, Math, Data, Business, และ Misc-

Feedback กันเข้ามาได้นะครับ ว่าชอบหรือไม่ชอบอย่างไร
เพื่อการปรับปรุง Content ให้ดียิ่งขึ้น

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

#BigDataRPG #DataScienceวันละตอน #HammingDistance

Uplift Model คืออะไร !! ทำไม Data Scientist ต้องรู้

จะรู้ได้อย่างไรว่า คนนี้ซื้อ คนนี้ไม่ซื้อ คนนี้ไม่สนใจ !

ต้อนรับ 9.9 ด้วยเรื่อง Uplift Model กัน 🎉
*** คำเตือนยาวมาก แชร์ไปก่อนค่อยอ่าน ***



จะรู้ได้อย่างไรว่าเราควรส่งโฆษณาให้ใครดีน้าา
เค้าถึงจะซื้อสินค้าเรา !!! 🤷‍♀️🤷🤷‍♂️


ฝั่งนักการตลาด 💁‍♀️

โดยปกตินักการตลาด หรือคนที่ทำการโฆษณาต่างๆก็จะทำ Campaign แล้วก็ส่งโฆษณานั้นให้กับทุกๆคนไปเลย ในกรณีนี้อาจจะเกิดขึ้นกับบริษัทที่พนักงานยังน้อย หรือไม่มีเวลาพอ หรือขาดทักษะในการที่จะมองหาว่าจริงๆแล้ว ผลิตภัณฑ์หรือสินค้าเรามันเหมาะกับแค่คนบางกลุ่มเท่านั้น บางกลุ่มไม่ต้องโฆษณาไปให้กับพวกเค้าก็ได้ เพราะในการโฆษณา มันมีเรื่องของค่าใช้จ่าย
.
ยิ่งเป็น Channel Offline แล้วใหญ่เลย เพราะเราเลือกกลุ่มลูกค้าไม่ได้ละเอียดมากนัก !!! เช่นถ้าเราอยากโฆษณาไปยัง คนที่อายุ 15-35 เฉพาะผู้ชาย ที่ทำงานในอุตสาหรกรรมการแพทย์ คำถามคือ เราจะเลือกให้โฆษณาเราส่งไปยังกลุ่มคนเหล่านี้อย่างเดียวเลยได้ไหม ก็ไม่ได้จริงไหม !! ค่อตยากอะบอกเลย
.
ซึ่งปัญหาเหล่านี้จะถูกเยียวยาได้โดยการโฆษณาผ่าน Channel Online ซึ่งจะพูดในลำดับถัดไปครับ


ฝั่งนักการตลาด 💁‍♀️


ในการยิง Campaign ไปยังลูกค้า นั้นสำหรับ บริษัทที่มีเวลา หรือทักษะในการทำ Segmentation ลูกค้าก็จะช่วยให้เราสามารถแบ่งกลุ่มลูกค้าได้อย่างง่ายๆ เช่น ลูกค้ากลุ่มนี้ ซื้อของกับเราทุกอาทิตย์เลยนะ ลูกค้าอีกกลุ่มซื้อไม่บ่อยแต่รายได้ต่อเดือนจากกลุ่มนี้ไม่ต่ำกว่า 1 หมื่นบาทเลยนะ !!
.
และเมื่อเราทำการ Segmentation เราก็สามารถเลือกส่งโฆษณาที่เหมาะสมไปยังลูกค้าของเราได้อย่างมีประสิทธิภาพมากขึ้น นั่นเองครับ
.
แต่คำถามที่ตามมาต่อคือ 🤔
เราเลือกโฆษณาให้เห็นแบบรายคนเลยได้ไหม !?
Personalized Campaign !😬🤭


ยุคของ AI 🚀

ยุคนี้อยู่กับเรามาตั้งนานแสนนานแล้ว
เพราะ Algorithm เริ่มต้นของ AI ก็มาจากการสร้างเงื่อนไขอย่างง่ายๆ ไปจนถึง เงื่อนไขที่มีความซับซ้อนมากขึ้นๆ ลองจินตนาการว่าเราต้องเขียนเงื่อนไขซัก 10 ล้านกรณี เราคงคางเหลืองกันไปก่อนจะสร้าง AI ที่ต้องการได้สำเร็จ
.
และเมื่อมันมากขึ้นจนถึงระดับที่เราไม่สามารถมาสร้างเงื่อนไขต่อได้ครบทุกอย่าง
.
ยุคของ Machine Learning และ Deep Learning ก็เริ่มเข้ามามีบทบาท และมามีส่วนช่วยในการสร้างเงื่อนไขหลายๆๆๆๆๆชั้น หลายๆกรณี ผ่านการเรียนรู้พฤติกรรมของข้อมูลในอดีต เพื่อทำนายผลที่น่าจะเกิดขึ้นในอนาคต และด้วย ML + DL นี่แหละครับที่มาช่วยในเรื่องของการโฆษณา หรือเลือกออก Campaign เพื่อสร้าง Personalized Campaign !! นั่นเอง


ฝั่งนักการตลาด 💁‍♀️


ณ ปัจจุบัน บริษัทที่มีนักวิทยาศาสตร์ข้อมูล หรือ Data Scientist ต่างก็ทำ Model โดยใช้ข้อมูลจากอดีตที่เก็บไว้มาเนิ่นนาน เพื่อทำนายว่า ลูกค้าของเราจะซื้อ Products หรือไม่ หรือใครที่มีแนวโน้มจะตอบสนองต่อ Campaign ของโฆษณา


Model อย่างง่ายๆ 🤖🐣


ก็จะเริ่มจากการทำนายผลว่า นายประหยัด จันอังคาร มีแนวโน้มจะซื้อสินค้า เรือดำน้ำ หรือไม่ !??
.
ซึ่ง Model เราอาจจะทำนายเพียงแค่ ซื้อ หรือไม่ซื้อแค่นั้น โดยบอกเป็น Propensity Score
หรือ ในโจทย์ Machine Learning คือโจทย์ปัญหา Classification Model
.
จากจุดนี้เองที่ทำให้นักการตลาดเวลาจะส่ง Campaign ไปยังลูกค้า ก็จะทำงานร่วมกันกับ Data Scientist
เพื่อให้ช่วยทำ Model บอกหน่อยว่า ลูกค้าคนไหนมีแนวโน้มจะซื้อสินค้าเรานะ !!!
หรือที่ทาง Data Scientist เรียกว่า ทำการส่ง Leads นะ !!


สถานการณ์ตัวอย่าง 💁‍♀️🍺
ณ บริษัทปุริเย่ จำกัด


ต้องการทำ Campaign เพื่อให้เกิด Conversion Rate เพิ่ม
จากเดิมที่ ปกติ Conversion Rate ของสินค้าเรือดำน้ำอยู่ที่ 2%
.
Data Scientist ก็ทำ Model ขึ้นมาและส่ง Leads ให้กับทาง Marketing Team ไปส่ง Campaign
ปรากฎว่า Conversion Rate เพิ่มขึ้นจากเดิม 2% เป็น 10% เท่ากับว่า มี Lift เพิ่มขึ้นถึง 5 เท่าด้วยกัน OMG !!!
(ใครมันซื้อไปวะ !!)
.
ถ้าสมมติว่า 2% เราทำรายได้จากการขายเรือดำน้ำไปถึง 200,000 ล้านบาท
และเมื่อเราทำ Campaign 9.9 โปรโมชั่นเรือดำน้ำ


“ของมันต้องมี เพื่อความน่าเกรงขราม เพียง 22,000 ล้านบาท”


ปรากฎว่า Model เราให้ผล Lift ถึง 5 เท่าเมื่อเทียบจากการไม่ทำ Model
โหดมวากๆเลยใช่ไหมล่ะครับ พออ่านมาถึงจุดนี้



แต่ !!!! 🙅‍♀️
Model มันก็ไม่ผิดค่ะ แต่คุณทำได้ดีกว่านี้อีก !!
(ทำเสียงปันๆ = _= )

GrabFood อิสรภาพทางการกิน
GrabFood อิสรภาพทางการกิน https://www.youtube.com/watch?v=1eb5A8NVy_A


.
อ้าวทำไมล่ะ !? ยังดีไม่พอหรอ !? หรือผิดตรงไหน
คำถามที่มีตอนนี้คือ !????

.
❓ เราทราบได้อย่างไรว่าคนที่ Convert มาจากการที่เค้าได้รับ Campaign จริงๆนะ !
ไม่ใช่เพราะเค้าอยากจะซื้ออยู่แล้ว

❓ Propensity model ที่เราทำมันไปกวาดมาทุกๆคนเลยที่มี Score การซื้อสูงๆๆ
แล้วเราก็ถึงส่งให้ Marketing ถูกไหม !?

❓ เราไม่ได้แยกลูกค้าที่เค้าอยากจะซื้ออยู่แล้วออกมานี่หน่า !?
ดังนั้นการที่เค้าซื้อ มันไม่ได้บอกว่าเค้าจำเป็นต้องได้รับ Campaign ก็ได้ ยังไงตูก็จะซื้ออยู่ดี

❓ เหตุการณ์ Lift 5 เท่า เหมือนคำพูดนึงที่พูดกันว่า Cherry Picking !!
.


เอ้า แล้วทำไงดีล่ะ ????
เอาล่ะ ยินดีต้อนรับสู่ต้อนรับทุกท่านสู่โลกของ
Casual Inference กับ Machine learning 🎉
.
ทำความรู้จักกับ Uplift Model กัน
(โอ้ยกว่าจะเข้าเรื่อง !!! )


.
โอเคร ง่ายๆเลยโจทย์คือเราต้องการจะทำ Model เพื่อบอกว่าใครน่าจะซื้อ เรือดำน้ำ เราในอนาคต !?
.
โดยปกติ Uplift Model จะช่วยเราตอบคำถามดังต่อไปนี้

✅ โฆษณษของเราส่งผลให้ลุกค้าซื้อหรือไม่ !?
✅ เราเสียเงินเปล่าในการชักชวนคนที่จะซื้อสินค้าเราอยู่แล้วหรือไม่ !
✅ โฆษณาเราส่งผลลบกับคนที่เห็นไหมเอ่ย บางคนเห็นโฆษณาเลยไม่ซื้อแม่งเลย ทั้งๆที่เค้าจะซื้ออยู่แล้ว !!!!!
.
โดยปกติ Classic Machine Learning Mdoel
เราใช้ Features (X) เพื่อทำนาย (Y)
แต่กับ Uplift Model
ช่วยเราดูผลกระทบของ Treatment ที่มีต่อ Y โดยที่ Y ใช้ X เพื่อทำนาย
.


มาทำความรู้จัก Uplift Model อย่างง่ายกัน 🤖
(Siegel 2011)


โดย Basic เลยเราจะทำการแบ่งลูกค้าเดิมของเราเป็น 4 กลุ่มด้วยกัน


🟠 กลุ่ม Sure Thing
กลุ่มนี้ไม่ต้องเสนอ Promotion เค้าก็ตั้งใจจะซื้ออยู่แล้ว !!!
เช่นลุกค้าบางรายเห็น เรือดำน้ำแล้วอยากซื้อ อยากได้จนตัวสั่น
ไม่รู้อยากได้ไปทำไม แต่เพื่อความน่าเกรงขาม และของมันต้องมี !!


🟢 กลุ่ม Persuables
กลุ่มนี้จะซื้อก็ต่อเมื่อได้รับ Campaign
ถ้าไม่ลดราคา ตูไม่ซื้อ ไม่มีอะไรมาชักชวน ตูไม่สน
ไม่โทรมา ตูก็ไม่โทรหา !!


🟠 กลุ่ม Lost Cost
กลุ่มนี้ไม่สนใจสินค้าเราตั้งแต่ต้นอยู่แล้ว !
ดังนั้นส่ง Campaign ไปก็เสียเปล่าๆ แบบว่าเห็นแล้วก็ อื้ม!!
แล้วก็ปล่อยโฆษณาผ่านไปเหมือนไม่มีอะไรเกิดขึ้น


🔴 กลุ่ม Sleeping Dog
กลุ่มนี้จะให้ผลลบทันทีเมื่อได้รับ Campaign ส่งมาหาตูหรอ เดี๋ยวเจอดีๆ
นอกจากกลุ่มนี้ไม่ซื้อแล้วยังจะให้ผลลบกับเราอีก
(เมิงอย่ามายุ่งกับกรู๋ !!!!)


ดังนั้นในการทำ Propensity Model
เราเพียงแค่ยิง Campaign ไปยังกลุ่ม Persuables ง่ายๆแค่นี้เอง !!
กลุ่มอื่นยิงไปก็ไม่มีประโยชน์เลย
และควรเลี่ยงผลที่ไม่ดีจากการยิงไปหากลุ่มคนจำพวก 🔴 Sleeping Dog
.


อ้าาาาาาาา
จาก Propensity Model ไปสู่ Uplift Model เย้

.


.
ข้อควรระวังจาก Uplift Model !! 🗡
❗ ข้อมูลที่เราใช้แบ่งกลุ่มลูกค้า มันไม่ได้บอกได้ชัดเจนนัก
ต้องอาศัยระยะเวลาในการเก็บข้อมูลเพื่อให้เกิดความแน่นอน
ว่าลูกค้าเราอยู่กลุ่มไหน


อ่าน Research เพิ่มเติมด้าน Uplift ได้ที่

✅ Meta-learners for Estimating Heterogeneous Treatment Effects using Machine Learning
https://arxiv.org/abs/1706.03461

✅ How incremental response modeling can help you reach the right target group more precisely
https://blogs.sas.com/content/subconsciousmusings/2013/07/12/how-incremental-response-modeling-can-help-you-reach-the-right-target-group-more-precisely/

✅ Targeting Uplift
https://www.springer.com/gp/book/9783030226244

✅ True response modeling
http://www.bigdatanalysis.com/response-modeling/


แน่นอนถ้าเพื่อนๆอ่านมาถึงจุดนี้
แอดเชื่อว่าเพื่อนๆ อยู่ในกลุ่ม ☺️❤️
🟠 กลุ่ม Sure Thing + 🟢 กลุ่ม Persuables


แอดเองก็ต้องปล่อย Promotion บ้าง อิอิ
กับ Workshop Road to Data Scientist and Data Analyst 🚀
สมัครได้แล้วตอนนี้ ที่
http://bit.ly/roadtodsda
🔥 เรามีส่วนลดให้ Early Bird เปิดตัวสูงถึง 40%
🔥 Early Bird ถึงวันที่ 15 กันยายน


ติดตาม Tip & Tricks ง่ายๆไปด้วยกันได้ที่ BigData RPG
ส่งต่อบทความดีดี และมีประโยชน์ให้เพื่อนได้ง่ายๆ
เพียงคนละ 1 Like | 1 Share | 1 Commentsขอบคุงมากเลยคร้าบ
❤️🙋‍♂️🙋‍♀️🍺🍣


Reference:
🔰 https://towardsdatascience.com/a-quick-uplift-modeling-introduction-6e14de32bfe0
🔰 https://www.predictiveanalyticsworld.com/machinelearningtimes/uplift-modeling-making-predictive-models-actionable/8578/
🔰 https://towardsdatascience.com/uplift-modeling-e38f96b1ef60
🔰 https://pbiecek.github.io/xai_stories/story-uplift-marketing1.html
🔰 https://www.steveklosterman.com/uplift-modeling/

#BigDataRPG #MachineLearning #Marketing