diff --git a/Nam/Final_code 1.py b/Nam/Final_code 1.py new file mode 100644 index 0000000..e2a381f --- /dev/null +++ b/Nam/Final_code 1.py @@ -0,0 +1,45 @@ + +import pandas as pd +import pickle +from tensorflow.keras.models import load_model +from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score +from url_preprocessing import preprocess_url_dataframe # 너가 만든 전처리 모듈 + +# 1. 원본 데이터 불러오기 +df = pd.read_csv("train.csv") # 또는 적절한 파일명으로 수정 +print("원본 데이터 불러옴") + +# 2. 전처리 적용 +df_processed = preprocess_url_dataframe(df) +print(" 전처리 완료") + +# 3. 피처/레이블 분리 +X = df_processed.drop(columns=['label', 'URL', 'URL_clean'], errors='ignore') # 'label' 없으면 자동 무시 +y = df_processed['label'] if 'label' in df_processed.columns else None + +# 4. 스케일러 불러오기 +with open("scaler.pkl", "rb") as f: + scaler = pickle.load(f) +X_scaled = scaler.transform(X) +print(" 스케일링 완료") + +# 5. 모델 불러오기 +model = load_model("best_model.h5") +print(" 모델 불러오기 완료") + +# 6. 예측 +y_pred_proba = model.predict(X_scaled).ravel() +best_threshold = 0.34 # 여기에 저장된 값이 있다면 pickle로 불러올 수 있음 + +y_pred = (y_pred_proba > best_threshold).astype(int) + +# 7. 결과 출력 +if y is not None: + print("예측 결과 (테스트셋 평가)") + print("Accuracy:", accuracy_score(y, y_pred)) + print("F1 Score:", f1_score(y, y_pred)) + print("Precision:", precision_score(y, y_pred)) + print("Recall:", recall_score(y, y_pred)) +else: + print("예측 완료! 라벨이 없어 평가 생략") + print("예측 결과 샘플:", y_pred[:10]) diff --git a/Nam/best_model 1.h5 b/Nam/best_model 1.h5 new file mode 100644 index 0000000..ae3950d Binary files /dev/null and b/Nam/best_model 1.h5 differ diff --git a/Nam/scaler 1.pkl b/Nam/scaler 1.pkl new file mode 100644 index 0000000..65ea96a Binary files /dev/null and b/Nam/scaler 1.pkl differ diff --git a/jun/code.ipynb b/jun/code.ipynb index 83501d9..417dd2e 100755 --- a/jun/code.ipynb +++ b/jun/code.ipynb @@ -2392,703 +2392,56 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 2, "metadata": {}, "outputs": [ { - "data": { - "application/vnd.microsoft.datawrangler.viewer.v0+json": { - "columns": [ - { - "name": "index", - "rawType": "object", - "type": "string" - }, - { - "name": "label", - "rawType": "float64", - "type": "float" - }, - { - "name": "url_length_cat", - "rawType": "float64", - "type": "float" - }, - { - "name": "num_dots", - "rawType": "float64", - "type": "float" - }, - { - "name": "num_digits", - "rawType": "float64", - "type": "float" - }, - { - "name": "num_special_chars", - "rawType": "float64", - "type": "float" - }, - { - "name": "url_keyword", - "rawType": "float64", - "type": "float" - }, - { - "name": "num_underbar", - "rawType": "float64", - "type": "float" - }, - { - "name": "extract_consecutive_numbers", - "rawType": "float64", - "type": "float" - }, - { - "name": "number", - "rawType": "float64", - "type": "float" - }, - { - "name": "upper", - "rawType": "float64", - "type": "float" - }, - { - "name": "is_common_tld", - "rawType": "float64", - "type": "float" - }, - { - "name": "is_country_tld", - "rawType": "float64", - "type": "float" - }, - { - "name": "is_suspicious_tld", - "rawType": "float64", - "type": "float" - }, - { - "name": "domain_length", - "rawType": "float64", - "type": "float" - }, - { - "name": "has_subdomain", - "rawType": "float64", - "type": "float" - }, - { - "name": "subdomain_length", - "rawType": "float64", - "type": "float" - }, - { - "name": "subdomain_count", - "rawType": "float64", - "type": "float" - }, - { - "name": "path_depth", - "rawType": "float64", - "type": "float" - }, - { - "name": "has_query", - "rawType": "float64", - "type": "float" - }, - { - "name": "query_length", - "rawType": "float64", - "type": "float" - }, - { - "name": "query_param_count", - "rawType": "float64", - "type": "float" - }, - { - "name": "url_shorteners", - "rawType": "float64", - "type": "float" - }, - { - "name": "compression_ratio", - "rawType": "float64", - "type": "float" - }, - { - "name": "entropy", - "rawType": "float64", - "type": "float" - }, - { - "name": "digit_ratio", - "rawType": "float64", - "type": "float" - }, - { - "name": "special_char_ratio", - "rawType": "float64", - "type": "float" - } - ], - "conversionMethod": "pd.DataFrame", - "ref": "c79a077e-8e52-4e42-b88f-dc9698b0fa30", - "rows": [ - [ - "count", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0" - ], - [ - "mean", - "0.22371472079708868", - "1.4435534183000107", - "1.546944584861079", - "1.6343590387267808", - "2.6635716711917676", - "0.0370789025849114", - "0.045005501028154746", - "0.056463736673444787", - "0.08128040719044995", - "0.0357764112252997", - "0.6133649251700057", - "0.12739140329970197", - "0.022784949827420967", - "10.464007150192936", - "0.21130266862767075", - "2.43731000866898", - "0.2660177416735477", - "0.6056849294701858", - "0.027221368921135157", - "1.9155892390282507", - "0.04228915393958247", - "0.0018421582329004942", - "1.4552534994784176", - "3.5360434022769756", - "0.029042428345387533", - "0.1102289088601276" - ], - [ - "std", - "0.41673309122602675", - "1.1161203432813147", - "1.010078604927829", - "9.827940363271033", - "7.1618457272654", - "0.18895518694176003", - "0.6023702991784359", - "0.23081505741717664", - "0.273265280035072", - "0.18573223887275842", - "0.4869788780260291", - "0.33341093196934307", - "0.14921728811320575", - "5.0652546813544035", - "0.4082326232468674", - "6.90096602515224", - "0.6272395647222854", - "1.6003209664806863", - "0.1627279010519657", - "19.702068343354906", - "0.35208851309719974", - "0.04288082262284407", - "0.24856536988340924", - "0.47898938276414027", - "0.08255957016074264", - "0.046338026902092454" - ], - [ - "min", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.010181818181818183", - "-0.0", - "0.0", - "0.0" - ], - [ - "25%", - "0.0", - "0.0", - "1.0", - "0.0", - "1.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "7.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "1.3076923076923077", - "3.238901256602631", - "0.0", - "0.07142857142857142" - ], - [ - "50%", - "0.0", - "1.0", - "1.0", - "0.0", - "2.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "1.0", - "0.0", - "0.0", - "10.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "1.4444444444444444", - "3.5068905956085183", - "0.0", - "0.10344827586206896" - ], - [ - "75%", - "0.0", - "2.0", - "2.0", - "0.0", - "3.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "1.0", - "0.0", - "0.0", - "13.0", - "0.0", - "0.0", - "0.0", - "1.0", - "0.0", - "0.0", - "0.0", - "0.0", - "1.6153846153846154", - "3.7962176025900556", - "0.0", - "0.14285714285714285" - ], - [ - "max", - "1.0", - "3.0", - "171.0", - "2011.0", - "8198.0", - "1.0", - "136.0", - "1.0", - "1.0", - "1.0", - "1.0", - "1.0", - "1.0", - "63.0", - "1.0", - "237.0", - "38.0", - "136.0", - "1.0", - "8367.0", - "131.0", - "1.0", - "5.0", - "6.570554108088201", - "0.9545454545454546", - "1.0" - ] - ], - "shape": { - "columns": 26, - "rows": 8 - } - }, - "text/html": [ - "
| \n", - " | label | \n", - "url_length_cat | \n", - "num_dots | \n", - "num_digits | \n", - "num_special_chars | \n", - "url_keyword | \n", - "num_underbar | \n", - "extract_consecutive_numbers | \n", - "number | \n", - "upper | \n", - "... | \n", - "subdomain_count | \n", - "path_depth | \n", - "has_query | \n", - "query_length | \n", - "query_param_count | \n", - "url_shorteners | \n", - "compression_ratio | \n", - "entropy | \n", - "digit_ratio | \n", - "special_char_ratio | \n", - "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "... | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "6.995056e+06 | \n", - "
| mean | \n", - "2.237147e-01 | \n", - "1.443553e+00 | \n", - "1.546945e+00 | \n", - "1.634359e+00 | \n", - "2.663572e+00 | \n", - "3.707890e-02 | \n", - "4.500550e-02 | \n", - "5.646374e-02 | \n", - "8.128041e-02 | \n", - "3.577641e-02 | \n", - "... | \n", - "2.660177e-01 | \n", - "6.056849e-01 | \n", - "2.722137e-02 | \n", - "1.915589e+00 | \n", - "4.228915e-02 | \n", - "1.842158e-03 | \n", - "1.455253e+00 | \n", - "3.536043e+00 | \n", - "2.904243e-02 | \n", - "1.102289e-01 | \n", - "
| std | \n", - "4.167331e-01 | \n", - "1.116120e+00 | \n", - "1.010079e+00 | \n", - "9.827940e+00 | \n", - "7.161846e+00 | \n", - "1.889552e-01 | \n", - "6.023703e-01 | \n", - "2.308151e-01 | \n", - "2.732653e-01 | \n", - "1.857322e-01 | \n", - "... | \n", - "6.272396e-01 | \n", - "1.600321e+00 | \n", - "1.627279e-01 | \n", - "1.970207e+01 | \n", - "3.520885e-01 | \n", - "4.288082e-02 | \n", - "2.485654e-01 | \n", - "4.789894e-01 | \n", - "8.255957e-02 | \n", - "4.633803e-02 | \n", - "
| min | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "... | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "1.018182e-02 | \n", - "-0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "
| 25% | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "1.000000e+00 | \n", - "0.000000e+00 | \n", - "1.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "... | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "1.307692e+00 | \n", - "3.238901e+00 | \n", - "0.000000e+00 | \n", - "7.142857e-02 | \n", - "
| 50% | \n", - "0.000000e+00 | \n", - "1.000000e+00 | \n", - "1.000000e+00 | \n", - "0.000000e+00 | \n", - "2.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "... | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "1.444444e+00 | \n", - "3.506891e+00 | \n", - "0.000000e+00 | \n", - "1.034483e-01 | \n", - "
| 75% | \n", - "0.000000e+00 | \n", - "2.000000e+00 | \n", - "2.000000e+00 | \n", - "0.000000e+00 | \n", - "3.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "... | \n", - "0.000000e+00 | \n", - "1.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "0.000000e+00 | \n", - "1.615385e+00 | \n", - "3.796218e+00 | \n", - "0.000000e+00 | \n", - "1.428571e-01 | \n", - "
| max | \n", - "1.000000e+00 | \n", - "3.000000e+00 | \n", - "1.710000e+02 | \n", - "2.011000e+03 | \n", - "8.198000e+03 | \n", - "1.000000e+00 | \n", - "1.360000e+02 | \n", - "1.000000e+00 | \n", - "1.000000e+00 | \n", - "1.000000e+00 | \n", - "... | \n", - "3.800000e+01 | \n", - "1.360000e+02 | \n", - "1.000000e+00 | \n", - "8.367000e+03 | \n", - "1.310000e+02 | \n", - "1.000000e+00 | \n", - "5.000000e+00 | \n", - "6.570554e+00 | \n", - "9.545455e-01 | \n", - "1.000000e+00 | \n", - "
8 rows × 26 columns
\n", - "