OLTP
เข้าใจระบบต้นทางและข้อจำกัดของงาน transaction
OPERATIONAL DATA → MACHINE LEARNING
เส้นทางจาก transaction ตอนชำระเงินไปสู่ Feature ของโมเดล ไม่ใช่เพียงนำ SELECT ไปวางข้าง production แต่เป็นระบบข้อมูลที่เข้าใจเวลา ต้องจับการเปลี่ยนแปลง เก็บประวัติศาสตร์ นิยาม entity และ event คำนวณซ้ำได้ และส่งมอบความหมายเดียวกันให้ทั้ง training และ prediction
เข้าใจระบบต้นทางและข้อจำกัดของงาน transaction
เก็บการเปลี่ยนแปลงแทนการเห็นเพียงสถานะล่าสุด
ไม่ให้ข้อมูลอนาคตหลุดเข้า training row
เผยแพร่ input ของโมเดลที่ทดสอบและใช้ซ้ำได้
01 · THE COMPLETE PATH
OLTP ปกป้อง transaction ของธุรกิจ ส่วนเส้นทาง Analytics และ ML เก็บประวัติศาสตร์และจัดรูปใหม่เพื่อการสังเกต แต่ละช่วงมีหน้าที่ต่างกัน
02 · TWO DIFFERENT WORKLOADS
ฐานข้อมูลอาจรัน analytical query ได้ในทางเทคนิค แต่ไม่ได้แปลว่า production คือสถานที่เหมาะสำหรับ full-history join และ rolling window ที่ทำซ้ำ
Query สำหรับ Feature ที่หนักจะแย่ง CPU, memory, I/O, lock และ connection กับ transaction ของผู้ใช้ อีกทั้งอาจเห็นเพียงสถานะล่าสุด ทำให้สร้าง training data ในอดีตซ้ำไม่ได้ Read replica ช่วยลด contention แต่ไม่ได้แก้เรื่อง history, semantics หรือ point-in-time correctness โดยอัตโนมัติ
03 · STATE IS NOT HISTORY
ตารางระบบงานมักเก็บที่อยู่ สถานะ หรือยอดคงเหลือล่าสุด แต่การ train โมเดลอาจต้องรู้ว่าค่าเหล่านั้นเป็นอย่างไร ณ เวลาทำนายในอดีต
04 · THREE CLOCKS
ข้อมูลที่มาถึงล่าช้าทำให้ event time กับ ingestion timeไม่ตรงกัน ความถูกต้องของ Feature ขึ้นกับว่านาฬิกาใดคือสิ่งที่โมเดลมองเห็นได้จริง
เวลาที่เหตุการณ์ทางธุรกิจเกิดขึ้น เช่น ซื้อเมื่อ 09:07
เวลาที่ Data Platform ได้รับข้อมูล เช่น 09:14 หลัง network delay
เวลาที่โมเดลตัดสินใจ เช่น 09:10
เหตุการณ์เกิด 09:07 แต่มาถึงระบบ 09:14 โมเดลที่ทำนายเวลา 09:10 ควรเห็นหรือไม่ สำหรับ online system โดยทั่วไปคือไม่ควร เพราะ Platform ยังไม่ได้รับข้อมูล Historical Feature จึงอาจต้องเก็บทั้ง event_time และ available_at/ingestion_time
05 · CAPTURE CHANGE DELIBERATELY
Change Data Capture อ่าน database log แล้วส่ง insert, update และ delete โดยกระทบ source ต่ำ แต่ CDC ไม่ได้นิยาม entity, deduplicate business event หรือเลือก Feature Window ให้เอง
UPDATE orders SET status='paid'before: pending
after: paid
source_ts: 09:07valid_from · valid_to
event_time · loaded_atจับการเปลี่ยนแปลงจาก transaction log โดยเพิ่ม query load ต่ำ แต่ต้องออกแบบ connector, ordering และ recovery
Query แถวใหม่กว่าค่า watermark ทำง่ายกว่า แต่ต้องระวังคุณภาพ timestamp, update, delete และขอบเขตเวลา
คัดลอกสถานะเป็นช่วง เหมาะกับ reconciliation แต่มีต้นทุนสูงและไม่เห็นทุก transition ระหว่าง snapshot
06 · SQL LAB: POINT-IN-TIME FEATURES
SQL แบบย่อนี้คำนวณกิจกรรมลูกค้า 30 วันก่อนแต่ละการทำนาย ระบบจริงต้องจัดการข้อมูลมาช้า time zone, event ซ้ำ และขนาดของ query
-- Grain: one row per customer per prediction_time
SELECT
p.customer_id,
p.prediction_time,
COUNT(o.order_id) AS orders_30d,
COALESCE(SUM(o.amount), 0) AS spend_30d,
MAX(o.ordered_at) AS last_order_time
FROM ml.prediction_events AS p
LEFT JOIN history.orders AS o
ON o.customer_id = p.customer_id
AND o.ordered_at >= p.prediction_time - INTERVAL '30 days'
AND o.ordered_at < p.prediction_time
AND o.available_at <= p.prediction_time
AND o.status = 'completed'
GROUP BY p.customer_id, p.prediction_time;ordered_at < prediction_time กันเหตุการณ์ธุรกิจในอนาคต available_at <= prediction_time กันข้อมูลที่มาช้าไม่ให้ถูกมองว่าระบบรู้มาก่อนแล้ว07 · FAILURE MODES
ความสำเร็จทางเทคนิคคือ query ทำงานจบ ส่วนความถูกต้องของข้อมูลคือผลลัพธ์แทนสิ่งที่โมเดลควรรู้ได้จริง
Feature scan ทำให้ transaction ของลูกค้าช้า หรือใช้ replica และ connection จนเต็ม
นำ segment ล่าสุดของลูกค้าไปใส่ training row ในอดีต
การยกเลิกหรือ fraud review ที่เกิดหลังทำนายหลุดเข้า Feature
Retry หรือ replay ทำให้นับ business event เดียวหลายครั้ง
Join customer, account และ household ID ราวกับเป็น entity เดียวกัน
Logic ใน notebook ต่างจาก implementation ของ online service
08 · ENGINEERING DECISIONS
ไม่มีสถาปัตยกรรมบังคับเพียงแบบเดียว แต่หลักการยังคงเดิม คือปกป้องระบบงาน เก็บประวัติศาสตร์เพียงพอ ระบุความหมาย Feature และสร้างค่าซ้ำได้ ณ เวลาที่ต้องการ
THE CENTRAL IDEA