TechJam 2019 by KBTG, Deep Data Final Round Summary: Finding Spending Behavior With Word2Vec

Phiratath Nopratanawong
KBTG Life
Published in
3 min readDec 26, 2019

ณ ตอนนี้ TechJam 2019 by KBTG ก็ได้จบลงไปแล้ว ปีนี้ผู้เข้าแข่งต่างพูดเป็นเสียงเดียวกันว่าโจทย์ยากมากจริงๆ ตรงกับคอนเซ็ปท์ “Deep Jam” กันเลยครับ ต้องขอแสดงความยินดีกับผู้ชนะทั้ง 3 ด้านด้วยนะครับ

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

ผู้เข้าแข่งขัน Deep Data เมื่อเจอโจทย์รอบสุดท้ายไปก็น่าจะอึ้งกันพอสมควรเพราะข้อมูลการใช้งานบัตรเครดิตนั้นมีความพิเศษและต้องอาศัยการรับมือแบบเฉพาะทาง ในบทความนี้จะเน้นไปที่การหา Spending Behavior หรือการหาพฤติกรรมของลูกค้าในการใช้งานบัตรเครดิตแต่ละใบครับ

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

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

ทางเลือกที่ง่ายที่สุดคือการทำ Count Column ขึ้นมา ก็คือนับไปตรง ๆ เลยว่า บัตรแต่ละประเภทมีการใช้งานกับร้านค้าไหนบ้าง ใช้ไปเท่าไหร่ แต่การทำแบบนี้จะทำให้ Feature ของเรามีค่าเป็น 0 เยอะมากและมี Column จำนวนมหาศาล เนื่องจากจำนวนข้อมูลของร้านค้านั้นมีมากถึงหลักแสนร้าน เราอาจจะต้องเลือกมาแค่ Top 5 หรือ Top 10 ในบัตรแต่ละประเภท เท่านี้ก็เพียงพอในการช่วยให้โมเดลเราทำงานได้ดีขึ้น

แต่จะดีกว่าไหมถ้าเราสามารถจัดระเบียบข้อมูลหรือทำ Clustering กับรายชื่อร้านค้าได้โดยไม่ต้องมานั่ง Label เองว่าปั๊ม ปตท. ต้องอยู่คู่กับปั๊มบางจาก ตรงนี้เราจะทำการเปลี่ยน Data ประเภท Text ให้กลายเป็น Numeric แทน ซึ่งเราสามารถทำได้โดยการใช้ Word2Vec

Word2Vec

Word2Vec จัดเป็นโมเดล deep learning ที่เข้าใจง่ายเเพราะมีเพียงแค่ 1 Hidden Layer โดยหลักการทำงานนั้นเราจะทำการใส่ ประโยคเข้าไปในตัวโมเดลในรูปของ list of string เช่น

“ [‘ผม’ , ’ชอบ’ , ’ลิซ่า’ , ’มาก’ , ’ครับ’] ”

จากนั้นโมเดล จะทำการ embedding คำเหล่านี้ให้กลายเป็น Vector โดยหลักการคือคำไหนที่สามารถทดแทนกันได้จะอยู่ใกล้กัน เช่น

ผมไปซื้อ__สีดำมา

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

แล้วที่นี้ Word2Vec มาเกี่ยวอะไรกับรายชื่อร้านค้ากันล่ะ เพื่อให้เห็นภาพผมขอให้ผู้อ่านเล่นเติมคำกันสักหน่อย

ข้าวสาร ไข่ไก่ ___

เลย์ โค้ก ___

จากรายชื่อสินค้าข้างบน เราน่าจะเห็นของเหล่านี้ปรากฏร่วมกันบ่อย ๆ คนซื้อ ข้าวสาร ไข่ไก่ เนื้อหมู อาจจะเป็นแม่บ้าน ในขณะที่คนซื้อ เลย์ โค้ก เป๊ปซี่ ก็อาจจะเป็นคนอีกจำพวกหนึ่ง ดังนั้นด้วยหลักการ Word2Vec ทำให้เราสามารถ embed สินค้าได้โดยดูว่าสินค้าเหล่านี้ปรากฏร่วมกันกับสินค้าอะไร

สาเหตุที่ทำให้ Word2Vec ทำงานได้ดีกับคำและรายชื่อสินค้านั้นจะประกอบด้วย 2 เหตุหลัก ๆ คือ

  1. Sample มีจำนวนน้อยเมื่อเทียบกับ Pattern ในการเกิด คือ จำนวนสินค้านั้นมีน้อยมากเมื่อเทียบกับรูปแบบของการเกิดเลือกซื้อสินค้า หรือ ในส่วนของคำก็จะเห็นว่ามีคำน้อยมากเมื่อเทียบกับรูปแบบประโยคที่เป็นไปได้
  2. Vector ที่ได้ออกมาเราสามารถอธิบายได้หรือเรามีคำตอบในใจอยู่แล้ว เช่น เมื่อเรานำคำมาเข้า Word2Vec เรามีคำตอบในใจแล้วว่า แมวควรอยู่ใกล้กับหมา กางเกงควรอยู่ใกล้กับรองเท้า ถ้าเราไม่มีคำตอบในใจ เราจะไม่มีวันรู้เลยว่า Word2Vec นั้น embed ข้อมูลที่มีประโยชน์ให้เรามาด้วยรึเปล่า

ซึ่งนอกจาก คำและสินค้าแล้ว Word2Vec ยังสามารถทำงานได้ดีกับการแนะนำเพลงอีกด้วยดังตัวอย่างด้านล่าง

ทีนี้เมื่อเรานำข้อมูลรายชื่อร้านค้าเข้าไป Word2Vec ผลลัพธ์ที่ได้จะออกมาคร่าว ๆ ดังนี้

plot ด้วย https://projector.tensorflow.org/
คำที่อยู่ใกล้กับ Nike
คำที่อยู่ใกล้กับ Bar B Q Plaza
คำที่อยู่ใกล้กับ Steam

จะเห็นว่าตอนนี้เราได้ผลลัพธ์เป็นที่น่าพอใจแล้ว มาถึงคราวที่เราจะต้องทำการ Clustering รายชื่อร้านค้าเหล่านี้ด้วย Hierarchical Clustering

ตัวอย่าง Hierarchical Clustering Plot ด้วย Dendrogram

การทำ Clustering แบบนี้จะตรงไปตรงมาเพราะเราจะค่อยๆไล่ Distance ให้ใกล้ขึ้นเรื่อย ๆ แล้วดูว่าคำไหนจะสามารถรวมเข้าด้วยกันได้ใน Vector Space ซึ่งสามารถศึกษาเพิ่มเติมได้จากลิงก์ด้านล่าง

เพียงเท่านี้เราก็จะได้กลุ่มประเภทสินค้าตามที่เราต้องการ ในส่วนของผู้เข้าแข่งขันนั้นผมได้ทำการใส่กลุ่มที่เกิดขึ้นจากการ Clustering นี้ไปให้ คือ Columns c6 นั่นเอง

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

--

--