Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import pandas as pd | |
| import numpy as np | |
| # データの読み込み | |
| data = pd.read_csv("20250221_Car_LogitData.csv") | |
| # 結果を格納するデータフレーム | |
| results_df = pd.DataFrame(columns=["Car_Type", "Condition", "Interest_Rate", "Purchase_Probability", "Expected_Purchase_Amount"]) | |
| # ロジット関数の定義 | |
| def logistic(x, beta_0, beta_1): | |
| return 1 / (1 + np.exp(-(beta_0 + beta_1 * x))) | |
| # 分析関数 | |
| def perform_analysis(car_type, avg_price, interest_rate, cut_rate): | |
| global results_df # 既存の結果に追加するためにグローバル変数を利用 | |
| # 入力値の制限チェック | |
| if not (1 <= car_type <= 10): | |
| return "Error: Car_Type must be between 1 and 10." | |
| if interest_rate < 0 or cut_rate < 0: | |
| return "Error: Interest rates must be non-negative." | |
| # CSVから切片と係数を取得 | |
| beta_0 = data.iloc[int(car_type) - 1, 9] # 10列目(0-indexなので9) | |
| beta_1 = data.iloc[int(car_type) - 1, 10] # 11列目(0-indexなので10) | |
| # 現在の購入確率と期待購入額 | |
| purchase_prob_current = logistic(interest_rate, beta_0, beta_1) | |
| expected_purchase_current = purchase_prob_current * avg_price | |
| # 金利を引き下げた場合の計算(0%未満にならないように制限) | |
| new_interest_rate = max(0, interest_rate - cut_rate) | |
| purchase_prob_new = logistic(new_interest_rate, beta_0, beta_1) | |
| expected_purchase_new = purchase_prob_new * avg_price | |
| # 結果を保存 | |
| new_result = pd.DataFrame({ | |
| "Car_Type": [car_type, car_type], | |
| "Condition": ["Current", f"After Cut ({cut_rate}%)"], | |
| "Interest_Rate": [interest_rate, new_interest_rate], | |
| "Purchase_Probability": [purchase_prob_current, purchase_prob_new], | |
| "Expected_Purchase_Amount": [expected_purchase_current, expected_purchase_new] | |
| }) | |
| results_df = pd.concat([results_df, new_result], ignore_index=True) | |
| return new_result | |
| # CSVダウンロード関数 | |
| def download_results(): | |
| csv_path = "Car_Purchase_Results.csv" | |
| results_df.to_csv(csv_path, index=False) | |
| return csv_path | |
| # Gradio インターフェースの作成 | |
| with gr.Blocks() as demo: | |
| gr.Markdown("### 🚗 車種ごとの金利と購入確率の分析ツール(CSVデータからβ0とβ1を自動取得)") | |
| with gr.Row(): | |
| car_type = gr.Slider(label="Car Type (1-10)", minimum=1, maximum=10, step=1, value=1) | |
| avg_price = gr.Number(label="Average Purchase Price", value=2000000) | |
| interest_rate = gr.Number(label="Current Interest Rate (%)", value=3.9, minimum=0) | |
| cut_rate = gr.Number(label="Interest Rate Cut (%)", value=0.5, minimum=0) | |
| output = gr.Dataframe(label="Analysis Result") | |
| analyze_button = gr.Button("Run Analysis") | |
| analyze_button.click( | |
| perform_analysis, | |
| inputs=[car_type, avg_price, interest_rate, cut_rate], | |
| outputs=output | |
| ) | |
| download_button = gr.Button("Download Results as CSV") | |
| download_file = gr.File() | |
| download_button.click(download_results, outputs=download_file) | |
| # 実行 | |
| demo.launch() | |