정말 좋은 아이디어입니다! 질병코드(ICD-10)를 활용하면 처방전 기반 추천이 가능해집니다. 🎯 두 가지 접근 방식 비교 방식 1: 계층 구조 (추천 ⭐⭐⭐) 질병코드 (ICD-10) → 질병군 → 제품군 → 개별 제품 방식 2: 직접 연결 질병코드 (ICD-10) → 개별 제품 📊 계층 구조가 더 좋은 이유 예시: 소화불량 환자 계층 구조: K30 (소화불량) ↓ 소화기질환 ↓ 소화제 (제품군) ↓ ├─ 베아제 ├─ 훼스탈 ├─ 닥터베아제 └─ 겔포스 직접 연결: K30 (소화불량) → 베아제, 훼스탈, 닥터베아제, 겔포스 K29 (위염) → 베아제, 훼스탈, 겔포스 (중복!) K21 (역류성식도염) → 겔포스, 훼스탈 (또 중복!) 장점 비교 항목 계층 구조 직접 연결 유지보수 ✅ 제품군만 수정 ❌ 모든 질병코드 수정 확장성 ✅ 새 질병코드 추가 쉬움 ❌ 일일이 매핑 필요 중복 방지 ✅ 관계 한 번만 정의 ❌ 중복 많음 추천 유연성 ✅ 질병군 기반 추천 ❌ 특정 질병만 추천 🗄️ DB 설계 (계층 구조) SQLite 테이블 구조 -- 1. 질병 코드 (ICD-10) CREATE TABLE disease_codes ( icd_code TEXT PRIMARY KEY, -- K30 disease_name TEXT NOT NULL, -- 소화불량 disease_category TEXT, -- 소화기질환 description TEXT ); -- 2. 질병군 CREATE TABLE disease_categories ( category_id INTEGER PRIMARY KEY, category_name TEXT UNIQUE NOT NULL, -- 소화기질환 parent_category TEXT -- 상위 카테고리 (옵션) ); -- 3. 제품군 CREATE TABLE product_categories ( category_id INTEGER PRIMARY KEY, category_name TEXT UNIQUE NOT NULL, -- 소화제 description TEXT ); -- 4. 질병군 ↔ 제품군 매핑 CREATE TABLE disease_product_mapping ( id INTEGER PRIMARY KEY, disease_category TEXT NOT NULL, -- 소화기질환 product_category TEXT NOT NULL, -- 소화제 relevance_score REAL DEFAULT 1.0, -- 0.0 ~ 1.0 (관련도) FOREIGN KEY (disease_category) REFERENCES disease_categories(category_name), FOREIGN KEY (product_category) REFERENCES product_categories(category_name) ); -- 5. 제품 마스터 (기존 테이블에 추가) CREATE TABLE product_master ( barcode TEXT PRIMARY KEY, product_name TEXT NOT NULL, product_category TEXT, -- 소화제 -- 기존 필드들... category TEXT, ingredients_json TEXT, tags_symptoms TEXT, tags_effects TEXT, FOREIGN KEY (product_category) REFERENCES product_categories(category_name) ); 🎯 실제 데이터 예시 1. 질병 코드 INSERT INTO disease_codes VALUES ('K30', '소화불량', '소화기질환', '기능성 소화불량증'), ('K29', '위염', '소화기질환', '만성 위염'), ('K21', '역류성식도염', '소화기질환', 'GERD'), ('M25', '관절통', '근골격계질환', '관절 통증'), ('R51', '두통', '신경계증상', '긴장성 두통'); 2. 질병군 → 제품군 매핑 INSERT INTO disease_product_mapping VALUES (1, '소화기질환', '소화제', 1.0), (2, '소화기질환', '위장약', 0.9), (3, '근골격계질환', '진통소염제', 1.0), (4, '근골격계질환', '파스', 0.7), (5, '신경계증상', '진통제', 1.0); 3. 제품 데이터 INSERT INTO product_master VALUES ('8806606002231', '베아제정', '소화제', '일반의약품', ...), ('8806436016712', '탁센캡슐', '진통소염제', '일반의약품', ...), ('8806265019618', '마그비맥스', '복합비타민', '일반의약품', ...); 🔍 추천 알고리즘 def recommend_by_prescription(user_id, icd_codes): """ 처방전 질병코드 기반 제품 추천 Args: user_id: 고객 ID icd_codes: ['K30', 'R51'] (소화불량 + 두통) Returns: 추천 제품 리스트 """ recommendations = [] # 1. 질병코드 → 질병군 disease_categories = db.execute(""" SELECT DISTINCT disease_category FROM disease_codes WHERE icd_code IN (?) """, icd_codes).fetchall() # → ['소화기질환', '신경계증상'] # 2. 질병군 → 제품군 product_categories = db.execute(""" SELECT product_category, relevance_score FROM disease_product_mapping WHERE disease_category IN (?) ORDER BY relevance_score DESC """, disease_categories).fetchall() # → [('소화제', 1.0), ('진통제', 1.0), ('위장약', 0.9)] # 3. 제품군 → 개별 제품 for cat, score in product_categories: products = db.execute(""" SELECT barcode, product_name, tags_symptoms FROM product_master WHERE product_category = ? ORDER BY RANDOM() LIMIT 3 """, (cat,)).fetchall() for product in products: recommendations.append({ "barcode": product.barcode, "name": product.product_name, "reason": f"{cat} 추천 (관련도: {score:.0%})", "score": score }) return recommendations 📱 실무 활용 시나리오 시나리오 1: 처방전 기반 추천 # 고객이 처방전으로 약 구매 prescription = { "customer_id": 123, "icd_codes": ["K30", "R51"], # 소화불량 + 두통 "prescribed_drugs": ["제산제", "타이레놀"] } # OTC(일반의약품) 추천 recommendations = recommend_by_prescription(123, ["K30", "R51"]) print(recommendations) # [ # {"name": "베아제정", "reason": "소화제 추천 (관련도: 100%)"}, # {"name": "훼스탈골드", "reason": "소화제 추천 (관련도: 100%)"}, # {"name": "탁센", "reason": "진통제 추천 (관련도: 100%)"} # ] 시나리오 2: 관리자 AI 분석 개선 # 기존: 단순 제품명만 분석 "김영빈 고객은 베아제, 탁센을 구매했습니다." # 개선: 질병 패턴 분석 user_diseases = infer_diseases_from_purchases(user_id) # → ["소화기질환", "근골격계질환"] print(f""" 김영빈 고객 건강 프로필: - 추정 질환: 소화기질환, 근골격계질환 - 구매 패턴: 소화제(베아제) + 진통제(탁센) - 추천 제품: 위장약(훼스탈), 파스(신신파스) - 마케팅: 만성 소화불량 관리 프로그램 안내 """) 🚀 구현 우선순위 Phase 1 (지금): 기본 구조만 -- product_master에 product_category만 추가 ALTER TABLE product_master ADD COLUMN product_category TEXT; -- 제품 카테고리만 수동 입력 UPDATE product_master SET product_category = '소화제' WHERE barcode = '8806606002231'; Phase 2 (2주 후): 질병 매핑 -- disease_codes, disease_product_mapping 테이블 추가 -- 주요 질병코드 20-30개만 입력 Phase 3 (필요 시): 처방전 연동 -- MSSQL에서 처방전 데이터 가져오기 -- 자동 질병 패턴 분석 제 추천: 계층 구조로 가되, Phase 1부터 천천히 구축하는 게 좋습니다. 지금 바로 product_master 테이블 만들고, product_category 컬럼만 추가해서 시작할까요?