-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathapp.py
More file actions
144 lines (106 loc) · 6.42 KB
/
Copy pathapp.py
File metadata and controls
144 lines (106 loc) · 6.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
from st_pages import Page, Section, show_pages, add_page_title, hide_pages
import streamlit as st
from pathlib import Path
add_page_title()
show_pages(
[
#Section("Menu"),
Page("app.py", "환율 분석 및 예측 서비스", "✈️"),
Page("pages/recommend.py", "환전 날짜 추천", "🤖", in_section=True),
Page("pages/map.py", "세계 환율 변동", "🌏", in_section=True),
Page("pages/exchange_rate.py", "환율 계산 및 시각화", "📈", in_section=True),
]
)
hide_pages(["Thank you"])
st.balloons()
st.markdown("""
### 💡 아이디어 배경
해외여행을 준비하는 사람들에게 **환전 시점**은 비용 절감의 중요한 요소입니다.\n
환율 변동성을 고려하지 않고 환전할 경우, **불필요한 비용**이 발생할 수 있다는 점에서 착안했습니다.\n
여행 전에 **환전하기 가장 좋은 시점**을 안내하고, 이를 통해 사용자에게 **실질적인 금전적 이득**을 제공하는 서비스를 제공하고자 했습니다.
---
### 🧑💻 목적
* 사용자에게 국가와 날짜를 입력받아 최신 환율 정보를 제공하며, 과거 데이터와 예측 모델을 활용해 환율 변동을 분석합니다.
* 예측 결과를 기반으로 사용자가 최적의 환전 시점을 파악할 수 있도록 지원합니다.
---
### 🎯 기대효과
""")
col1, col2 = st.columns([1, 2])
with col1:
# 이미지 추가
st.image("https://d1c5n4ri2guedi.cloudfront.net/card/2700/card_img/34201/2700card.png", width=180)
with col2:
st.markdown("""
### **위비트래블 체크카드** \n
환율 예측 및 최적 환전 시점 안내 기능을 추가 시,
- 사용자들에게 **환율 관리의 편의성** 제공으로 **서비스 경쟁력** 강화 가능
- 여행 준비 과정에서 환전과 결제까지 **원스톱**으로 해결
- 여행객뿐만 아니라 **투자 및 환전 관리에 관심이 있는 고객층**까지 사용자 범위 확대 가능
""")
st.markdown("""
---
### ⚙️ 기능
1️⃣ 사용자가 설정한 국가의 최근 한 달간 환율 변동성 분석 제공
2️⃣ 최근 일주일 동안 주요 국가들의 세계 환율 변동 동향 시각화 및 제공
3️⃣ 과거 데이터와 예측 모델을 기반으로 한 환율 추이 예측 및 최적 환전 시점 추천
---
### 📊 사용 데이터 """)
st.info("한국수출입은행 환율정보 Open API ➡️ [Click!](https://www.koreaexim.go.kr/ir/HPHKIR020M01?apino=2&viewtype=C&searchselect=&searchword=)")
st.markdown("""
---
### 📄 페이지별 설명
##### **[ app.py ]**
• 서비스 소개
• 메인 페이지
##### **[ crawling.py ]**
• 최근 5년치 우리은행 환율 데이터를 크롤링 및 분석
• Scikit-learn 라이브러리의 RandomForestRegressor를 활용하여 환율 추이를 예측
• 사용자 설정 기간 내 가장 낮은 환율이 예상되는 날짜 5개를 추천
##### **[ map.py ]**
• 최근 7일간 세계 환율 변동 추이 지도
• Plotly의 scatter_geo를 활용하여 세계 환율 변동 시각화
• 환율 변동성을 점의 크기(scatter size)로 반영하여 직관적 데이터 표현
##### **[ exchange_rate.py ]**
• 실시간 환율 정보를 기반으로 환율 계산 제공
• 환율 변동 데이터를 시각화하여 과거 추세를 한눈에 확인 가능
• 환율의 최대값, 최소값, 평균값을 제공하여 데이터의 분포와 특징을 파악
---
### ⚒️ Tools









---
### 🔧 트러블슈팅 회고
**1. 성능 관련 문제**
- **모델 성능 개선**
- **Before**:
- 첫 번째 모델 [MAE : **3.69**, MSE : **22.13**, R² : **0.86**]
- 이 모델은 예측 정확도가 상대적으로 떨어지며, 오차가 크게 발생한 예측 존재.
- **After**:
- 하이퍼파라미터를 최적화된 모델 [MAE : **2.12**, MSE : **10.85**, R² : **0.92**]
- 예측의 정확도 향상 및 오차 감소.
- **크롤링 시간 단축**
- request 캐싱으로 응답 시간 개선 진행 중
---
**2. 데이터 분석 과정 문제**
- **기간별 환율 조회 API의 부재**
- 환율 데이터를 기간별로 조회할 수 있는 API가 제공되지 않아 문제 발생.
- **웹 크롤링**을 통해 기간별 환율 데이터를 직접 수집하는 방식을 채택하여 문제를 해결.
- 크롤링한 데이터를 시각화 및 분석에 활용 가능한 형태로 변환하여 데이터 활용성을 극대화.
- **특정 데이터 추출을 위한 함수 생성**
- 우리은행 원본 환율 데이터에서 태그와 함께 다른 내용이 혼재되어 추출 문제 발생.
- **매매기준율에서 특정 텍스트만 필터링하는 함수**를 구현하여 문제를 해결.
---
**3. 협업**
- **깃 충돌 문제**
- 팀원이 동일한 파일을 수정하면서 **Git 충돌 문제**가 발생
- **Git Flow**를 도입하여 **브랜치**를 통한 작업 분리 및 **Pull Request**를 통한 코드 리뷰를 통해 문제 해결
""")
image_path1 = Path("pages/git flow.png") # 첫 번째 이미지 경로
st.image(image_path1, caption="git flow", use_container_width=True)