Skip to content

Commit ca05581

Browse files
authored
배포 v1.2.3
배포 v1.2.3
2 parents 5762604 + 5a58375 commit ca05581

File tree

4 files changed

+50
-16
lines changed

4 files changed

+50
-16
lines changed

.github/workflows/Deploy-ML-EC2.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,11 @@ jobs:
3636
cd MLOps
3737
3838
# Docker 컨테이너 재시작 (docker-compose가 있다면)
39-
docker compose down -v || true
40-
docker compose up -d --build
39+
if [ -f docker-compose.yml ]; then
40+
docker compose down
41+
docker compose rm -f
42+
docker rmi $(docker images -q) -f
43+
docker compose up -d --build
44+
fi
4145
4246
echo "Deployment completed successfully!"

MLOps/app/routers/recommendation.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,17 @@
1515
async def recommend_places(userid: str, query: str):
1616
"""Place ID 리스트 기반 추천 API"""
1717
try:
18-
top_3_place_ids, other_places_data = await deepctr_service.rank_places_by_ctr(userid, query)
18+
top_places_data, other_places_data = await deepctr_service.rank_places_by_ctr(userid, query)
1919

2020
# 스키마에 맞게 데이터 형식 변환
21-
recommend_places = [{"id": place_id} for place_id in top_3_place_ids]
22-
normal_places = [{"id": place['place_id']} for place in other_places_data]
21+
recommend_places = [
22+
{"id": p.get("id"), "category": p.get("category"), "subcategory": p.get("subcategory")}
23+
for p in top_places_data
24+
]
25+
normal_places = [
26+
{"id": p.get("id"), "category": p.get("category"), "subcategory": p.get("subcategory")}
27+
for p in other_places_data
28+
]
2329

2430
return ReccomendResponse(
2531
success=True,

MLOps/app/schema/recommendation_schema.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,29 @@ class ReccomendResponse(BaseModel):
1414
...,
1515
description="추천 장소 목록",
1616
example={
17-
"recommend": [{"id": "place_id_1"}, {"id": "place_id_2"}, {"id": "place_id_3"}],
18-
"normal": [{"id": "place_id_4"}, {"id": "place_id_5"}]
17+
"recommend": [
18+
{
19+
"id": "place_id_1",
20+
"category": "관광지",
21+
"subcategory": "자연관광지"
22+
},
23+
{
24+
"id": "place_id_2",
25+
"category": "음식점&카페",
26+
"subcategory": "한식"
27+
}
28+
],
29+
"normal": [
30+
{
31+
"id": "place_id_3",
32+
"category": "문화시설",
33+
"subcategory": "박물관"
34+
},
35+
{
36+
"id": "place_id_4",
37+
"category": "쇼핑",
38+
"subcategory": "전문매장/상가"
39+
}
40+
]
1941
}
2042
)

MLOps/app/services/deepctr_service.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ async def rank_places_by_ctr(self, userid: str, query: str):
2626
places_df = pd.DataFrame(places_list)
2727

2828
# DataFrame의 컬럼 이름 변경
29-
places_df = places_df.rename(columns={'uuid': 'place_id', 'name': 'place_name'})
29+
places_df = places_df.rename(columns={'uuid': 'id', 'name': 'place_name'})
3030

3131
# 사용자 정보를 DataFrame의 모든 행에 추가
3232
if not user_info_df.empty:
@@ -39,19 +39,21 @@ async def rank_places_by_ctr(self, userid: str, query: str):
3939
places_df['gender'] = 1 # 남성을 기본값으로 가정
4040
places_df['like_list'] = "[1,2,3,4,5]"
4141

42-
input_data = places_df
43-
42+
# 원본 데이터에서 응답에 필요한 컬럼 보존
43+
output_columns = ['id', 'category', 'subcategory']
44+
preserved_df = places_df[output_columns]
45+
4446
# 모델 예측
45-
predictions = self.model.predict(input_data)
47+
predictions = self.model.predict(places_df)
4648

47-
# input data에 예측값 추가
48-
input_data['ctr'] = predictions
49+
# 예측 결과를 원본 데이터에 추가
50+
preserved_df['ctr'] = predictions
4951

5052
# 예측값 기준 정렬
51-
input_data = input_data.sort_values(by='ctr', ascending=False)
53+
sorted_df = preserved_df.sort_values(by='ctr', ascending=False)
5254

5355
# 상위 3개 장소 반환, 나머지도 반환
54-
top_places = input_data.head(3)['place_id'].tolist()
55-
other_places = input_data.iloc[3:].to_dict('records')
56+
top_places = sorted_df.head(3).to_dict('records')
57+
other_places = sorted_df.iloc[3:].to_dict('records')
5658
return top_places, other_places
5759

0 commit comments

Comments
 (0)