รายวิชา ปฏิบัติการสารสนเทศด้านสุขภาพ (อจวพ ๓๐๒)
หลักสูตรวิทยาศาสตรบัณฑิต สาขาวิชาวิทยาศาสตร์การแพทย์
การเปลี่ยนแปลงระดับโลกในยุคการปฏิวัติอุตสาหกรรมครั้งที่ 4 นำพาความก้าวหน้าอย่างก้าวกระโดดของเทคโนโลยีดิจิทัล และปัญญาประดิษฐ์ (AI) เข้ามายกระดับวิทยาศาสตร์การแพทย์และการแพทย์แม่นยำ (Precision Medicine)
การวิเคราะห์ข้อมูลขนาดใหญ่ (Big Data) และการตรวจวิเคราะห์ระดับจีโนม จะเกิดขึ้นไม่ได้เลย หากระบบโรงพยาบาลไม่มี "สถาปัตยกรรมข้อมูลสุขภาพ" ที่เสถียร ปลอดภัย และพร้อมใช้งานสำหรับการเขียนโปรแกรมและประมวลผลข้อมูล
ระบบข้อมูลสุขภาพต้องรับมือกับความผันผวนและความซับซ้อนที่สูงขึ้นอย่างต่อเนื่อง สถาปัตยกรรมคลังข้อมูลที่ดีจะช่วยให้นิสิตวิเคราะห์หาข้อค้นพบ (Insights) และนำเทคโนโลยีมาปฏิบัติงานได้อย่างปลอดภัยตามมาตรฐานสากล
ข้อมูลสุขภาพในสถานพยาบาลประกอบด้วยความหลากหลายสูงมาก เพื่อความเข้าใจก่อนสร้างท่อส่งข้อมูล (Data Pipeline) นิสิตต้องแยกแยะโครงสร้างทั้ง 3 รูปแบบหลักดังนี้:
🟢 ข้อมูลแบบมีโครงสร้าง (Structured): เช่น ไฟล์ใบสั่งยา prescriptions.csv และทะเบียนคลินิก practices_registry.csv หรือฐานข้อมูลสถิติที่จัดเก็บในรูปของแถวและคอลัมน์ชัดเจน
🔵 ข้อมูลกึ่งโครงสร้าง (Semi-structured): เช่น ไฟล์แลกเปลี่ยนข้อมูลคนไข้มาตรฐาน HL7 FHIR ในรูปแบบของไฟล์ XML หรือ JSON
🟡 ข้อมูลไม่มีโครงสร้าง (Unstructured): เช่น ข้อความบันทึกของแพทย์ (Clinical Notes), ไฟล์ภาพเอกซเรย์ หรือข้อมูลสัญญาณชีพคลื่นหัวใจต่อเนื่อง
คลังข้อมูลจำลองของ MIT อย่าง MIMIC-IV แสดงให้เห็นว่า ท่อประมวลผลข้อมูลสุขภาพหลายมิติ (Multimodal Pipeline) ต้องสามารถรวบรวมไฟล์ทั้งสัญญาณคลื่นสรีรวิทยา, ประวัติ และภาพถ่ายรังสีเข้ามาบำบัดร่วมกันได้ในระบบเดียว
Data Warehouse หรือ "คลังข้อมูลสุขภาพรวมศูนย์" เป็นระบบที่ใช้จัดเก็บข้อมูลที่ผ่านการทำความสะอาดและจัดเรียงโครงสร้างที่สอดคล้องตามกฎทางธุรกิจหรือมาตรฐานความสอดคล้องทางการแพทย์มาเป็นอย่างดีแล้ว
การรันคำสั่งภาษา SQL ในสัปดาห์ที่ 5-8 ของรายวิชานี้ (เช่นการสืบค้นข้อมูลใบสั่งยาจำลองด้วย SQL SELECT) ส่วนใหญ่จะปฏิบัติการกับคลังข้อมูลลักษณะ Data Warehouse เป็นหลักครับ
Data Lake คือสภาพแวดล้อมที่ใช้รองรับการเก็บ "ข้อมูลสุขภาพทุกตระกูลแบบดิบๆ" โดยไม่มีความจำเป็นต้องกำหนดโครงสร้างตารางล่วงหน้า (Schema-on-Read) ทำให้มีความยืดหยุ่นสูงสุด
การรวบรวมข้อมูลดิบระดับประชากรจำนวนหลายแสนคนของโครงการ UK Biobank ต้องใช้ Data Lake เป็นแกนกลาง เพื่อเก็บลำดับพันธุกรรมร่วมกับประวัติการรักษาพยาบาลและการติดตามข้อมูลกิจกรรมสุขภาพด้วยอุปกรณ์สวมใส่
| คุณลักษณะหลัก (Feature) | Data Warehouse | Data Lake |
|---|---|---|
| ประเภทข้อมูล (Data type) | ข้อมูลเชิงโครงสร้างสัมพัทธ์ (Structured) เท่านั้น | ข้อมูลทุกรูปแบบดิบๆ (Raw, Unstructured, Semistructured) |
| เวลาออกแบบโครงสร้าง (Schema) | Schema-on-Write (ออกแบบก่อนบันทึก) | Schema-on-Read (ออกแบบเมื่อต้องการอ่านใช้) |
| ต้นทุนความจุ (Storage Cost) | ค่อนข้างสูง (ความเร็วการรันคำสั่งรวดเร็ว) | ต่ำมาก (รองรับการจัดเก็บไฟล์ดิบระดับเทราไบต์) |
| กลุ่มเป้าหมายผู้ใช้งาน (Users) | แพทย์ผู้รวบรวมสถิติ, ผู้จัดการคลินิก, นักวิเคราะห์ข้อมูล | นักวิจัยจีโนมิกส์, วิศวกรปัญญาประดิษฐ์ทางการแพทย์ |
สถาปัตยกรรมข้อมูลไม่ว่าจะเป็นรูปแบบใด หัวใจสำคัญที่สุดคือเรื่องความปลอดภัยและจริยธรรมข้อมูลคนไข้ นิสิตกระบวนวิชา อจวพ ๓๐๒ ต้องคำนึงถึงกรอบข้อบังคับด้านความเป็นส่วนตัวเช่น HIPAA ของสากล และ พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล (PDPA พ.ศ. 2562) ของประเทศไทยในการทำงานทุกขั้นตอน
พีระมิดอัตราการจดจำ (Learning Pyramid) ระบุว่าการฟังบรรยาย (Lecture) ช่วยในการจำได้เพียง 5% ขณะที่การฝึกปฏิบัติ (Practice by doing) ช่วยในการจำเนื้อหาและเข้าใจโค้ดคำสั่งได้สูงถึง 75% ขอให้นิสิตข้ามไปเรียนรู้ "ส่วนที่ 2: เจาะลึกกระบวนการ ETL" เพื่อทดลองเขียนสคริปต์สกัดทำความสะอาดข้อมูลเพื่อลงคลังปฏิบัติการต่อไปครับ!
วางไฟล์ทั้ง 3 + patients_data.csv ไว้โฟลเดอร์เดียวกับ Notebook แล้วรัน pd.read_csv('prescriptions.csv')
รายวิชา ปฏิบัติการสารสนเทศด้านสุขภาพ (อจวพ ๓๐๒)
หลักสูตรวิทยาศาสตรบัณฑิต สาขาวิชาวิทยาศาสตร์การแพทย์
ขั้นตอนแรกของ ETL คือการสกัดข้อมูลดิบ (Raw Data) จากระบบบันทึกเวชระเบียนอิเล็กทรอนิกส์ (EHR) ของโรงพยาบาล ซึ่งเก็บข้อมูลแยกส่วนกันอยู่เป็นไซโล (Silos)
subject_idการวิจัยปัญญาประดิษฐ์ทางการแพทย์ขั้นสูง จำเป็นต้องใช้คีย์หลักร่วมกันเพื่อดึงข้อมูลข้ามมิติมาฝึกสอนโมเดลพร้อมกัน (Multimodal Fusion)
ข้อมูลดิบของข้อความบันทึกของแพทย์ (Clinical Notes) เช่น Discharge Summary (DS) และ Radiology Report (RR) มักอยู่ในรูปแบบข้อความอิสระ (Free-text) และไม่มีโครงสร้าง
ตามแนวทางวิจัยสากล เราจะใช้ Regular Expression (Regex) เพื่อระบุขอบเขตและแบ่งพาร์ติชันข้อความออกเป็นส่วนๆ (Section-wise Extraction) เพื่อประมวลผลต่อ
ในขั้นตอนวิศวกรรมข้อมูล ค่าน้ำหนัก ผลแล็บ (เช่น HbA1c) หรือสัญญาณชีพมักขาดหาย (Nulls) หรือพิมพ์วันเวลารับตัวผิดพลาด ขัดต่อความเป็นจริงทางคลินิก
dischtime เกิดขึ้นก่อน admittime แล้วตัดทิ้งหรือส่งทวนซ้ำหลังจากที่ข้อมูลสุขภาพดิบผ่านการสกัดและแปลงรูป (Extract & Transform) จนได้มาตรฐานความถูกต้องปลอดภัยแล้ว ขั้นตอนสุดท้ายคือการนำส่งข้อมูลเข้าสู่คลังข้อมูลปลายทาง (Load)
ในการสร้างตารางชุดข้อมูลสำหรับรันโมเดลปัญญาประดิษฐ์ทางการแพทย์ นิสิตจำเป็นต้องมีสคริปต์ Python ที่สแกนสกัดข้อมูลจากไฟล์ผู้ป่วยรายบุคคลมารวบรวมกันในโครงสร้างตารางเดียว
patient_id และ age_at_encounter💡 สคริปต์ที่มีประสิทธิภาพจะช่วยลดระยะเวลาสืบค้นและหลีกเลี่ยงข้อผิดพลาดเรื่องประเภทตัวแปรไม่ตรงกันเมื่อต้องประมวลข้อมูลคนไข้ระดับหลายแสนรายพยากรณ์
ในสไลด์ส่วนที่ 2 นี้ นิสิตได้เจาะลึกกระบวนการสกัด ทำความสะอาด แปลง และบันทึกข้อมูลเพื่อเตรียมประยุกต์ทำนายกลุ่มประชากรผู้ป่วยโรคเบาหวานสะสมอย่างเป็นระบบแล้ว
ขอให้นิสิตจับคู่สคริปต์ ETL เข้าสู่บทเรียน "ส่วนที่ 3: การออกแบบท่อข้อมูล (Data Pipeline) และไปป์ไลน์สุขภาพอัตโนมัติ" ซึ่งเราจะทำการเชื่อมขั้นตอนเหล่านี้เข้าด้วยกันเพื่อให้ระบบสามารถบำบัดข้อมูลได้เองทันทีเมื่อมีข้อมูลใหม่เข้ามาในระบบแล็บสาธารณสุขครับ!
วางไฟล์ทั้ง 3 + patients_data.csv ไว้โฟลเดอร์เดียวกับ Notebook แล้วรัน pd.read_csv('prescriptions.csv')
รายวิชา ปฏิบัติการสารสนเทศด้านสุขภาพ (อจวพ ๓๐๒)
หลักสูตรวิทยาศาสตรบัณฑิต สาขาวิชาวิทยาศาสตร์การแพทย์
ในระบบสาธารณสุขจริง ข้อมูลคนไข้และสัญญาณชีพจะหลั่งไหลเข้ามาอย่างต่อเนื่อง การทำกระบวนการ ETL ด้วยมือในทุกๆ ครั้ง เป็นเรื่องที่เป็นไปไม่ได้และเต็มไปด้วยความเสี่ยงที่จะเกิดความคลาดเคลื่อนที่เป็นอันตรายต่อชีวิตคนไข้
คือการสร้างท่อส่งข้อมูลจำลองที่เชื่อมต่อขั้นตอนการ Extract ⮕ Transform ⮕ Load เข้าด้วยกันอย่างไร้รอยต่อ เพื่อแปลงข้อมูลดิบขนาดใหญ่ให้กลายเป็นผลลัพธ์ที่สะอาด มีมาตรฐาน และพร้อมป้อนเข้าสู่โมเดลปัญญาประดิษฐ์ (AI-Ready Infrastructure)
ความท้าทายสูงสุดของข้อมูลหลายมิติคือ "ความถี่ที่แตกต่างกันอย่างมากของวันเวลาบันทึก" เช่น ภาพเอกซเรย์ปอดอาจถ่ายเพียงสัปดาห์ละครั้ง ในขณะที่สัญญาณชีพอาจถูกบันทึกในระดับชั่วโมงหรือทุกๆ 5 นาที
ไปป์ไลน์มาตรฐานจะทำการ **Estimate event count** หรือนับความถี่เหตุการณ์ในแต่ละช่วงเวลา และกำหนดขอบเขตค่าพารามิเตอร์สูงสุด-ต่ำสุดเพื่อกรองข้อมูลผิดปกติ (**Outlier removal**) ออกตามเกณฑ์ร้อยละไทล์ (top k-percentile)
การสร้างแบบจำลองการทำนายทางเวชศาสตร์ที่แม่นยำสูง (Precision Medicine) จำเป็นต้องอาศัยการประมวลและเชื่อมโยงตารางข้อมูลต่างๆ เข้าสู่แถวประวัติคนไข้รายเดียวกันด้วยดัชนีคีย์หลักร่วมกัน
ไปป์ไลน์ที่ดีต้องสามารถแยกแยะและสกัดส่วนของข้อความบันทึกของแพทย์ออกเป็นหัวข้อ (Section-wise Extraction) เพื่อไม่ให้นำประวัติครอบครัวหรือสิ่งอื่นๆ ไปปะปนกับค่าวินิจฉัยคนไข้ปัจจุบัน
note_idFAMILY_HISTORY หรือ FINDINGS
นอกจากข้อมูลข้อความดิบแล้ว ท่อส่งข้อมูลเวชระเบียนอัจฉริยะยังเพิ่มประสิทธิภาพโดยให้ตัวเลือกในการแปลงข้อความเวชระเบียนให้กลายเป็นคอลัมน์เวกเตอร์คณิตศาสตร์ (Embeddings) เช่น text_embed และ img_embed เพื่อนำไปใช้เทรนโมเดล Deep Learning ได้โดยสะดวก
การสร้างไปป์ไลน์ประมวลผลข้อมูลสุขภาพระดับประชากร จะต้องตั้งอยู่บนความรับผิดชอบอย่างรอบคอบและปลอดภัยสูงสุด โดยอิงตามนโยบายด้านสุขภาพระดับสากลและระดับประเทศ
ข้อมูลสุขภาพในระบบจะต้องได้รับการควบคุมความปลอดภัยด้านสารสนเทศอย่างรอบด้าน การประมวลผลไปป์ไลน์จะต้องจัดทำและผ่านกระบวนการคัดกรองสิทธิ์และขออนุญาตล่วงหน้าอย่างโปร่งใส ถูกต้องตามกฎหมายคุ้มครองข้อมูลส่วนบุคคลของไทย **(PDPA พ.ศ. 2562)** และมาตรฐานความเป็นส่วนตัวเวชระเบียนสากลอย่าง **HIPAA** เสมอครับ
ขอต้อนรับผู้เรียนเข้าสู่ภาคปฏิบัติการ 3 ชั่วโมงในห้องแล็บคอมพิวเตอร์ประจำสัปดาห์นี้ครับ! เป้าหมายของแล็บนี้คือการฝึกเขียนและรวมฟังก์ชันในภาษาไพทอนเพื่อจัดทำระบบประมวลผลข้อมูลคนไข้โรคเบาหวานสะสมจำลองแบบครบวงจร
ขอให้นิสิตทำการดาวน์โหลดไฟล์แล็บปฏิบัติการ (prescriptions.csv · practices_registry.csv · patients_data.csv) เปิด Jupyter Notebook แล้วเขียนโค้ดภาษาไพทอนสแกนสกัดคุณลักษณะคนไข้ ได้แก่ อายุ เพศ ผลตรวจระดับ HbA1c เฉลี่ย มารวบรวมกันเป็นไฟล์ความสะอาด readmission_training_data.csv เพื่อใช้เป็นรากฐานสำคัญในการสอบสัมฤทธิ์ตามกรอบของคณะสหเวชศาสตร์ จุฬาลงกรณ์มหาวิทยาลัย ต่อไปครับ!