import gradio as gr # 로그인 검증 함수 def verify_credentials(username, password): if username == "surppp" and password == "useb48": return True, "로그인 성공!" else: return False, "아이디 또는 비밀번호가 틀렸습니다." # 로그인 처리 함수 def login(username, password): success, message = verify_credentials(username, password) if success: return gr.update(visible=False), gr.update(visible=True), gr.update(value="") else: return gr.update(visible=True), gr.update(visible=False), gr.update(value=message) # 광고 전략 분석 함수 def 광고_전략_추천(ad_type, click_rate, conversion_rate): result = "" if ad_type == "검색 광고": if click_rate < 1.3 and conversion_rate < 3: result = ( "검색 광고 전략: 클릭률과 전환율이 모두 낮습니다. " "클릭률 개선을 우선적으로 고려하세요. " "일예산을 높이고 광고수익률(ROAS)을 500% 이하로 낮춰보세요. " "타겟 키워드를 재검토하고 고객층을 구체화하세요." ) elif click_rate < 1.3 and conversion_rate >= 3: result = ( "검색 광고 전략: 클릭률이 낮고 전환율이 높습니다. " "클릭을 많이 발생시키는 방향으로 광고를 조정하세요. " "썸네일 이미지를 후킹이 강한 스타일로 바꾸고, 일예산을 30% 높이세요. " "광고수익률(ROAS)을 450% 이하로 낮추는 것도 고려하세요." ) elif click_rate >= 1.3 and conversion_rate < 3: result = ( "검색 광고 전략: 클릭률은 높으나 전환율이 낮습니다. " "전환율을 개선하기 위한 상세페이지 및 리뷰를 점검하세요. " "광고수익률(ROAS)을 유지하며 전환율 변화를 모니터링하세요." ) elif click_rate >= 1.3 and conversion_rate >= 3: result = ( "검색 광고 전략: 클릭률과 전환율이 모두 높습니다. " "광고비를 더 높이거나 추가 광고를 집행해 성과를 극대화하세요. " "다른 광고 채널에서도 동일한 성과를 목표로 전략을 검토하세요." ) elif ad_type == "비검색 광고": if click_rate < 0.3 and conversion_rate < 2: result = ( "비검색 광고 전략: 클릭률과 전환율이 모두 낮습니다. " "클릭률 개선을 우선적으로 고려하거나 검색 광고에 더 집중하세요. " "일예산을 늘리고 ROAS를 300% 이하로 낮추는 것도 한 방법입니다." ) elif click_rate < 0.3 and conversion_rate >= 2: result = ( "비검색 광고 전략: 클릭률은 낮고 전환율은 높습니다. " "타겟 확대를 시도하고 초기 테스트를 진행하세요. " "검색 영역으로 전환하면 높은 전환율을 더 활용할 수 있습니다. 검색영역 광고를 돌려서 키워드를 찾는것에 더 집중해보세요. 더 나은 성과를 기대할 수 있습니다." ) elif click_rate >= 0.3 and conversion_rate < 2: result = ( "비검색 광고 전략: 클릭률은 높으나 전환율이 낮습니다. " "상세페이지를 개선하거나 전환율을 높일 수 있는 테스트를 진행하세요." ) elif click_rate >= 0.3 and conversion_rate >= 2: result = ( "비검색 광고 전략: 클릭률과 전환율이 모두 높습니다. " "비검색 영역에 추가 투자를 고려하세요. " "메타, 토스 등 외부 광고 채널을 병행하여 성과를 극대화하세요." ) return result # Gradio 인터페이스 구성 with gr.Blocks() as demo: # 로그인 UI with gr.Row(visible=True) as login_ui: gr.Markdown("## 로그인") username = gr.Textbox(label="아이디", placeholder="아이디를 입력하세요") password = gr.Textbox(label="비밀번호", type="password", placeholder="비밀번호를 입력하세요") login_button = gr.Button("로그인") login_message = gr.Textbox(label="알림", interactive=False) # 기존 기능 UI with gr.Row(visible=False) as main_ui: gr.Markdown("## 유즈비 캠페인 전략 코디네이터") gr.Markdown( """ ### 광고 기준 **검색 광고** 클릭률(CTR): - 1.3% 이상 → 좋음 - 1.3% 미만 → 개선 필요 전환율(CVR): - 3% 이상 → 좋음 - 3% 미만 → 개선 필요 **비검색 광고** 클릭률(CTR): - 0.3% 이상 → 좋음 - 0.3% 미만 → 개선 필요 전환율(CVR): - 2% 이상 → 좋음 - 2% 미만 → 개선 필요 """ ) with gr.Row(): ad_type_dropdown = gr.Dropdown( choices=["검색 광고", "비검색 광고"], label="광고 유형 선택", value="검색 광고", ) with gr.Row(): click_rate_slider = gr.Slider( minimum=0.01, maximum=100.0, step=0.01, label="클릭률(CTR) 입력 (%)", value=1.0, interactive=True ) conversion_rate_slider = gr.Slider( minimum=0.01, maximum=100.0, step=0.01, label="전환율(CVR) 입력 (%)", value=3.0, interactive=True ) result_output = gr.Textbox(label="추천 광고 전략") # 이벤트 연결 ad_type_dropdown.change( fn=광고_전략_추천, inputs=[ad_type_dropdown, click_rate_slider, conversion_rate_slider], outputs=result_output ) click_rate_slider.change( fn=광고_전략_추천, inputs=[ad_type_dropdown, click_rate_slider, conversion_rate_slider], outputs=result_output ) conversion_rate_slider.change( fn=광고_전략_추천, inputs=[ad_type_dropdown, click_rate_slider, conversion_rate_slider], outputs=result_output ) # 로그인 버튼 클릭 이벤트 login_button.click( login, inputs=[username, password], outputs=[login_ui, main_ui, login_message] ) demo.launch()