import React, { useState } from 'react'; import { ballClass, NumberRow, METHOD_META, METHOD_ORDER, SCORE_META, fmtKST } from '../lottoUtils'; const CombinedRecommendPanel = ({ combined, history, loading, histLoading, onRun, onCopy }) => { const [histExpand, setHistExpand] = useState(false); return (

AI · 종합 추론

종합 추론 번호 추천

5가지 통계 기법(빈도·지문·갭·공동출현·다양성)을 가중 투표로 합산해 최적 6개 번호를 도출합니다.

{loading && 분석 중…} {history.length > 0 && ( )}
{!combined && !loading && (

버튼을 눌러 종합 추론을 실행하세요.

)} {combined && ( <> {/* 기법별 추천 번호 */}
{METHOD_ORDER.map((key) => { const meta = METHOD_META[key]; const m = combined.methods?.[key]; if (!m) return null; return (
{meta.icon}

{meta.label} ({m.weight_pct}%)

{meta.desc}

{m.numbers.map((n) => { const inFinal = combined.final_numbers.includes(n); return ( {n} ); })}
); })}
{/* 최종 추론 결과 */}
종합 추론 결과 {combined.deduped && ( 중복 (이미 저장됨) )}
{combined.final_numbers.map((n) => { const votes = combined.vote_counts?.[String(n)] ?? 0; return (
{n} {Array.from({ length: 5 }).map((_, i) => ( ))}
); })}

● 점은 해당 번호가 채택된 기법 수 (최대 5개)

{/* 점수 바 */}

조합 품질 점수

{SCORE_META.map(({ key, label, color, weight }) => { const val = combined.scores?.[key] ?? 0; const pct = Math.round(val * 100); return (
{label} {weight}%
{pct}
); })}
종합 점수 {Math.round((combined.scores?.score_total ?? 0) * 100)} / 100

※ 이 추천은 역대 통계 패턴 기반 참고 자료이며, 당첨을 보장하지 않습니다.

)} {/* 추천 이력 */} {histExpand && (

종합 추론 이력

{histLoading &&

로딩 중…

} {history.map((item) => (
#{item.id} {fmtKST(item.created_at)} 기준 {item.based_on_draw ?? '-'}회
))}
)}
); }; export default CombinedRecommendPanel;