Skip to content

통계기반 예측 모델을 생성, 교체 플로우를 구현합니다. - #12

Merged
snughnu merged 8 commits into
devfrom
feat/Prediction-Strategy
Jul 14, 2026
Merged

통계기반 예측 모델을 생성, 교체 플로우를 구현합니다.#12
snughnu merged 8 commits into
devfrom
feat/Prediction-Strategy

Conversation

@snughnu

@snughnu snughnu commented Jul 14, 2026

Copy link
Copy Markdown
Owner

Situation

소비 예측 탭에 AI 예측 기능을 위한 기반이 없었음.
통계 기반 예측 로직, 모델 생성/저장/교체 플로우, 인사이트 카드가 모두 미구현 상태였고
Repository/UseCase 계층도 예측 관련 인터페이스가 없었음.

Task

  • 통계 기반 예측 전략(StatisticsPredictionStrategy) 구현
  • AI 모델을 SwiftData에 저장하는 Repository 구현
  • 사용자가 직접 모델을 생성하고 교체하는 플로우 구현
  • 인사이트 카드: 모델 없을 때 emptyView, 있을 때 항상 3개 표시
  • 각 레이어(Repository → UseCase → ViewModel → View) 전체 연결

Action

  • StatisticsPredictionStrategy: 이상 지출 감지 / 요일별 지출 예고 / 미기록 패턴 탐지 / 일별·카테고리별 예측 구현
  • AIModelModel (SwiftData): id(SP+UUID 6자), dataCount, accuracy(Float?), createdAt, isSelected 저장
  • SwiftDataAIRepository: 모델 생성 시 과거 소비 1건 이상 필수, 기존 모델 선택 해제 후 신규 선택, isSelected 기준 정렬
  • AIRepositoryProtocol / AIUseCaseProtocol: createModel, selectModel 추가
  • AIViewModel: hasPrediction = currentModel != nil, sortedInsights 항상 3개(없으면 emptyDescription), createModel/selectModel 추가
  • AIStatusCardView: 모델 생성 alert, 데이터 부족 alert, 모델 교체 sheet, 생성 완료 toast
  • ExpenseRepositoryProtocol: fetchAllExpenses() 추가
  • 테스트: SpyAIRepository, StubExpenseRepository, StubAIUseCase에 신규 메서드 반영

Result

  • 소비 데이터가 있으면 사용자가 직접 예측 모델을 생성·교체할 수 있음
  • 모델이 없으면 인사이트 카드 emptyView, 있으면 3개 인사이트 항상 표시
  • 정확도는 통계 기반 모델은 측정불가(nil), CoreML 도입 시 실제 값 표시 예정
  • AIUseCase / AIViewModel 테스트 커버리지 유지

@snughnu snughnu self-assigned this Jul 14, 2026
@snughnu snughnu added the feat 기능을 구현/수정합니다. label Jul 14, 2026
@snughnu
snughnu merged commit 992b876 into dev Jul 14, 2026
1 check passed
@snughnu
snughnu deleted the feat/Prediction-Strategy branch July 14, 2026 16:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feat 기능을 구현/수정합니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant