{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import re\n", "from urllib.parse import urlparse, parse_qs" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import tldextract" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "train = pd.read_csv(\"../../train.csv\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "train[\"URL\"] = train[\"URL\"].str.replace(\"[.]\", \".\", regex=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import re\n", "from urllib.parse import urlparse, parse_qs\n", "import tldextract\n", "import zlib\n", "from collections import Counter\n", "import math\n", "import ipaddress\n", "\n", "# def is_ip_address(url):\n", "# if not url or not isinstance(url, str):\n", "# return False\n", "# try:\n", "# parsed = urlparse(url if '//' in url else 'http://' + url)\n", "# domain = parsed.netloc.split(':')[0]\n", "# if not domain:\n", "# return False\n", "# ipaddress.ip_address(domain)\n", "# return True\n", "# except ValueError:\n", "# return False\n", "# except Exception:\n", "# return False\n", "\n", "\n", "\n", "def url_is_whitelisted(url):\n", " trusted_domains = [\n", " # 1. 포털 / 검색엔진\n", " 'naver.com', 'daum.net', 'google.com', 'bing.com', 'yahoo.com',\n", "\n", " # 2. 소셜 미디어 / 커뮤니케이션\n", " 'facebook.com', 'instagram.com', 'twitter.com', 'x.com', 'linkedin.com',\n", " 'whatsapp.com', 'kakao.com', 'kakaocorp.com',\n", "\n", " # 3. 동영상 / 스트리밍\n", " 'youtube.com', 'netflix.com', 'twitch.tv', 'tving.com', 'watcha.com',\n", "\n", " # 4. 쇼핑 / 이커머스\n", " 'amazon.com', 'gmarket.co.kr', '11st.co.kr', 'coupang.com', 'ssg.com', 'wemakeprice.com',\n", "\n", " # 5. 금융 / 결제\n", " 'paypal.com', 'kbfg.com', 'shinhan.com', 'hanafn.com', 'wooribank.com', \n", " 'kakaobank.com', 'toss.im',\n", "\n", " # 6. 공공기관 / 교육\n", " 'gov.kr', 'moe.go.kr', 'epeople.go.kr', 'pusan.ac.kr', 'ac.kr', \n", "\n", " # 7. IT / 기술\n", " 'apple.com', 'microsoft.com', 'adobe.com', 'github.com', 'stackoverflow.com'\n", "]\n", " \n", " try:\n", " domain = urlparse(url if '//' in url else '//' + url).netloc.lower()\n", " for trusted in trusted_domains:\n", " if domain.endswith(trusted):\n", " return True\n", " return False\n", " except:\n", " return False\n", "\n", "\n", "\n", "def check_similar_brand(url):\n", " # 자주 사용되는 브랜드/도메인 목록\n", " common_brands = {\n", " 'google', 'facebook', 'amazon', 'microsoft', 'apple', \n", " 'netflix', 'paypal', 'twitter', 'instagram', 'linkedin',\n", " 'youtube', 'yahoo', 'gmail', 'whatsapp', 'tiktok',\n", " 'geocities', 'angelfire', 'newadvent', 'wikipedia',\n", " }\n", " \n", " # 2. 유사 브랜드 확인\n", " try:\n", " # URL 파싱\n", " parsed = urlparse(url if '//' in url else '//' + url)\n", " domain = parsed.netloc.lower() if parsed.netloc else url.lower()\n", " \n", " for brand in common_brands:\n", " if brand not in domain:\n", " similar = False\n", " # 비슷한 철자 패턴 확인\n", " patterns = [\n", " brand.replace('o', '0'),\n", " brand.replace('i', '1'),\n", " brand.replace('l', '1'),\n", " brand.replace('e', '3'),\n", " brand.replace('a', '4'),\n", " brand.replace('s', '5'),\n", " brand + '-',\n", " brand + '_',\n", " brand[:-1], # 마지막 문자 제거\n", " ''.join(c + c for c in brand), # 문자 중복\n", " ]\n", " \n", " for pattern in patterns:\n", " if pattern in domain:\n", " similar = True\n", " break\n", " \n", " if similar:\n", " return True # 유사 브랜드가 발견되면 True 반환\n", " \n", " except Exception as e:\n", " return False # 예외 발생 시 False 반환\n", " \n", " return False # 유사 브랜드가 없으면 False 반환\n", "\n", "\n", "\n", "# url 압축 비율 계산 함수\n", "def compression_ratio(url: str) -> float:\n", " if not url:\n", " return 0.0\n", " original_length = len(url.encode('utf-8'))\n", " compressed_data = zlib.compress(url.encode('utf-8'))\n", " compressed_length = len(compressed_data)\n", " return compressed_length / original_length\n", "\n", "\n", "def extract_features(url):\n", " parsed_url = urlparse(url)\n", " suspicious_keywords = [\n", " 'login', 'verify', 'account', 'update', 'secure', 'banking', \n", " 'paypal', 'confirm', 'signin', 'auth', 'redirect', 'free', \n", " 'bonus', 'admin', 'support', 'server', 'password', 'click', \n", " 'urgent', 'immediate', 'alert', 'security', 'prompt'\n", " ]\n", " \n", " additional_keywords = [\n", " 'verify', 'wallet', 'cryptocurrency', 'bitcoin', 'ethereum',\n", " 'validation', 'authenticate', 'reset', 'recover', 'access',\n", " 'limited', 'offer', 'prize', 'win', 'winner', 'payment',\n", " 'bank', 'credit', 'debit', 'card', 'expire', 'suspension',\n", " 'unusual', 'activity', 'verify', 'document', 'invoice'\n", " ]\n", " \n", " all_keywords = list(set(suspicious_keywords + additional_keywords))\n", "\n", " contains_keyword = 0\n", " keyword_count = 0\n", " for keyword in all_keywords:\n", " if re.search(r'\\b' + keyword + r'\\b', url, re.IGNORECASE):\n", " contains_keyword = 1\n", " keyword_count += 1\n", " \n", " url_length = len(url)\n", " extracted = tldextract.extract(url)\n", " tld = extracted.suffix\n", " domain = extracted.domain\n", " subdomain = extracted.subdomain\n", "\n", " tld_length = len(tld) if tld else 0\n", " common_tlds = ['com', 'org', 'net', 'edu', 'gov', 'mil', 'io', 'co', 'info', 'biz']\n", " is_common_tld = 1 if tld in common_tlds else 0\n", " country_tlds = ['us', 'uk', 'ca', 'au', 'de', 'fr', 'jp', 'cn', 'ru', 'br', 'in', 'it', 'es']\n", " is_country_tld = 1 if tld in country_tlds else 0\n", " suspicious_tlds = ['xyz', 'top', 'club', 'online', 'site', 'icu', 'vip', 'work', 'rest', 'fit']\n", " is_suspicious_tld = 1 if tld in suspicious_tlds else 0\n", " url_shorteners = ['bit.ly', 'tinyurl.com', 'goo.gl', 't.co', 'ow.ly', 'is.gd', 'buff.ly', 'adf.ly', 'tiny.cc']\n", " full_domain = f\"{domain}.{tld}\" if tld else domain\n", " is_shortened = 1 if full_domain in url_shorteners else 0\n", "\n", "\n", " domain_length = len(domain) if domain else 0\n", " has_subdomain = 1 if subdomain else 0\n", " subdomain_length = len(subdomain) if subdomain else 0\n", " subdomain_count = len(subdomain.split('.')) if subdomain else 0 \n", "\n", " path = parsed_url.path\n", " path_length = len(path)\n", " path_depth = path.count('/') if path else 0\n", "\n", " query = parsed_url.query\n", " has_query = 1 if query else 0\n", " query_length = len(query) if query else 0\n", " query_params = parse_qs(query)\n", " query_param_count = len(query_params) if query_params else 0\n", "\n", " has_fragment = 1 if parsed_url.fragment else 0\n", " fragment_length = len(parsed_url.fragment) if parsed_url.fragment else 0\n", " \n", " # Character type ratios\n", " letter_count = sum(c.isalpha() for c in url)\n", " digit_count = sum(c.isdigit() for c in url)\n", " special_char_count = len(re.findall(r'[^a-zA-Z0-9]', url))\n", " \n", " letter_ratio = letter_count / url_length if url_length > 0 else 0\n", " digit_ratio = digit_count / url_length if url_length > 0 else 0\n", " special_char_ratio = special_char_count / url_length if url_length > 0 else 0\n", " \n", " # Character distribution and entropy\n", " if url:\n", " char_counts = Counter(url)\n", " total_chars = len(url)\n", " char_frequencies = {char: count/total_chars for char, count in char_counts.items()}\n", " entropy = -sum(freq * math.log2(freq) for freq in char_frequencies.values())\n", " else:\n", " entropy = 0\n", "\n", "\n", "\n", "\n", "\n", " if url_length <= 13:\n", " url_length_cat = 0 \n", " elif url_length <= 18:\n", " url_length_cat = 1 \n", " elif url_length <= 25:\n", " url_length_cat = 2 \n", " else:\n", " url_length_cat = 3\n", " \n", " if url_is_whitelisted(url):\n", " return {\n", " # 화이트리스트 URL이면 특징값들을 \"정상적\"으로 처리되도록 설정\n", " \"url_length_cat\": 1,\n", " \"num_dots\": 1,\n", " \"num_digits\": 0,\n", " \"num_special_chars\": 1,\n", " \"url_keyword\": 0,\n", " \"num_underbar\": 0,\n", " \"extract_consecutive_numbers\": 0,\n", " \"number\": 0,\n", " \"upper\": 0,\n", "\n", " \"is_common_tld\": 1,\n", " \"is_country_tld\": 0,\n", " \"is_suspicious_tld\": 0,\n", "\n", " \"domain_length\": 5,\n", " \"has_subdomain\": 0,\n", " \"subdomain_length\": 0,\n", " \"subdomain_count\": 0,\n", "\n", " \"path_depth\": 0,\n", " \"has_query\": 0,\n", " \"query_length\": 0,\n", " \"query_param_count\": 0,\n", " \"url_shorteners\": 0,\n", "\n", " \"compression_ratio\": 1.0,\n", " \"check_similar_brand\": 0,\n", " \"entropy\": 3.0,\n", " \"digit_ratio\": 0.0,\n", " \"special_char_ratio\": 0.1\n", " }\n", " \n", "\n", " return {\n", " \n", " # \"url_length\": url_length,\n", " \"url_length_cat\": url_length_cat,\n", " \"num_dots\": url.count(\".\"),\n", " \"num_digits\": sum(c.isdigit() for c in url),\n", " \"num_special_chars\": len(re.findall(r\"[^a-zA-Z0-9]\", url)),\n", " \"url_keyword\": contains_keyword,\n", " # \"url_keyword_count\": keyword_count,\n", " \"num_underbar\": url.count(\"_\"),\n", " \"extract_consecutive_numbers\": int(bool(re.findall(r'(\\d)\\1+', url))),\n", " \"number\": int(bool(len(re.findall(r'(\\d)(?!\\1)(\\d)(?!\\2)(\\d)', url)))),\n", " \"upper\": int(any(c.isupper() for c in url)),\n", "\n", " \"is_common_tld\": is_common_tld,\n", " \"is_country_tld\": is_country_tld,\n", " \"is_suspicious_tld\": is_suspicious_tld,\n", "\n", " \"domain_length\": domain_length,\n", " \"has_subdomain\": has_subdomain,\n", " \"subdomain_length\": subdomain_length,\n", " \"subdomain_count\": subdomain_count,\n", "\n", " # \"path_length\": path_length,\n", " \"path_depth\": path_depth,\n", " \"has_query\": has_query,\n", " \"query_length\": query_length,\n", " \"query_param_count\": query_param_count,\n", " # \"has_fragment\": has_fragment,\n", " # \"fragment_length\": fragment_length,\n", " \"url_shorteners\": is_shortened,\n", "\n", " # 새로 추가된 특성\n", " \"compression_ratio\": compression_ratio(url),\n", " \"check_similar_brand\" : check_similar_brand(url),\n", " \n", " # Advanced text analysis\n", " \"entropy\": entropy,\n", " #\"letter_ratio\": letter_ratio,\n", " \"digit_ratio\": digit_ratio,\n", " \"special_char_ratio\": special_char_ratio,\n", " \n", " # \"is_ip_address\" : is_ip_address(url)\n", " \n", " }\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def process_chunks(train, chunk_size, extract_features):\n", " \"\"\"\n", " train: DataFrame, 원본 데이터프레임\n", " chunk_size: int, 한 번에 처리할 URL의 개수\n", " extract_features: 함수, 각 URL에 대해 특징을 추출하는 함수\n", " \n", " return: 처리된 DataFrame\n", " \"\"\"\n", " # 청크로 나누기\n", " chunks = [train[\"URL\"][i:i + chunk_size] for i in range(0, len(train), chunk_size)]\n", " \n", " # 각 청크에 대해 apply 및 json_normalize 처리 후 결과를 저장\n", " chunk_results = []\n", " for chunk in chunks:\n", " # 각 청크에 대해 extract_features 함수를 적용\n", " chunk_features = chunk.apply(extract_features)\n", " \n", " # json_normalize 적용\n", " chunk_results.append(pd.json_normalize(chunk_features))\n", " \n", " # 처리된 청크 결과를 합침\n", " return pd.concat(chunk_results, ignore_index=True)\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "train_features_df = process_chunks(train, chunk_size=100000, extract_features=extract_features)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "application/vnd.microsoft.datawrangler.viewer.v0+json": { "columns": [ { "name": "index", "rawType": "int64", "type": "integer" }, { "name": "url_length_cat", "rawType": "int64", "type": "integer" }, { "name": "num_dots", "rawType": "int64", "type": "integer" }, { "name": "num_digits", "rawType": "int64", "type": "integer" }, { "name": "num_special_chars", "rawType": "int64", "type": "integer" }, { "name": "url_keyword", "rawType": "int64", "type": "integer" }, { "name": "num_underbar", "rawType": "int64", "type": "integer" }, { "name": "extract_consecutive_numbers", "rawType": "int64", "type": "integer" }, { "name": "number", "rawType": "int64", "type": "integer" }, { "name": "upper", "rawType": "int64", "type": "integer" }, { "name": "is_common_tld", "rawType": "int64", "type": "integer" }, { "name": "is_country_tld", "rawType": "int64", "type": "integer" }, { "name": "is_suspicious_tld", "rawType": "int64", "type": "integer" }, { "name": "domain_length", "rawType": "int64", "type": "integer" }, { "name": "has_subdomain", "rawType": "int64", "type": "integer" }, { "name": "subdomain_length", "rawType": "int64", "type": "integer" }, { "name": "subdomain_count", "rawType": "int64", "type": "integer" }, { "name": "path_depth", "rawType": "int64", "type": "integer" }, { "name": "has_query", "rawType": "int64", "type": "integer" }, { "name": "query_length", "rawType": "int64", "type": "integer" }, { "name": "query_param_count", "rawType": "int64", "type": "integer" }, { "name": "url_shorteners", "rawType": "int64", "type": "integer" }, { "name": "compression_ratio", "rawType": "float64", "type": "float" }, { "name": "check_similar_brand", "rawType": "object", "type": "unknown" }, { "name": "entropy", "rawType": "float64", "type": "float" }, { "name": "digit_ratio", "rawType": "float64", "type": "float" }, { "name": "special_char_ratio", "rawType": "float64", "type": "float" }, { "name": "is_ip_address", "rawType": "object", "type": "unknown" } ], "conversionMethod": "pd.DataFrame", "ref": "f42bb711-ae30-45ee-9508-ae238444414a", "rows": [ [ "0", "1", "3", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "6", "0", "0", "0", "0", "0", "0", "0", "0", "1.4444444444444444", "False", "3.3082708345352603", "0.0", "0.16666666666666666", "False" ], [ "1", "2", "3", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "4", "0", "0", "0", "0", "0", "0", "0", "0", "1.4210526315789473", "False", "3.471354487013928", "0.0", "0.15789473684210525", "False" ], [ "2", "2", "2", "0", "2", "0", "0", "0", "0", "0", "0", "0", "0", "15", "0", "0", "0", "0", "0", "0", "0", "0", "1.380952380952381", "False", "3.2728043273346206", "0.0", "0.09523809523809523", "False" ], [ "3", "2", "3", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "4", "0", "0", "0", "0", "0", "0", "0", "0", "1.3636363636363635", "False", "3.5337712560645564", "0.0", "0.13636363636363635", "False" ], [ "4", "3", "2", "2", "5", "1", "0", "0", "0", "1", "0", "0", "0", "7", "1", "6", "1", "2", "0", "0", "0", "0", "1.2424242424242424", "False", "3.772449620842178", "0.06060606060606061", "0.15151515151515152", "False" ], [ "5", "1", "2", "2", "3", "0", "0", "0", "0", "0", "0", "0", "0", "4", "0", "0", "0", "1", "0", "0", "0", "0", "1.4444444444444444", "False", "3.7254805569978675", "0.1111111111111111", "0.16666666666666666", "False" ], [ "6", "3", "2", "0", "8", "0", "0", "0", "0", "0", "0", "0", "0", "2", "0", "0", "0", "4", "0", "0", "0", "0", "1.1041666666666667", "False", "4.3082080733223185", "0.0", "0.16666666666666666", "False" ], [ "7", "0", "2", "0", "2", "0", "0", "0", "0", "0", "0", "0", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "2.0", "False", "2.75", "0.0", "0.25", "False" ], [ "8", "1", "1", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "9", "0", "0", "0", "0", "0", "0", "0", "0", "1.5714285714285714", "False", "3.521640636343319", "0.0", "0.07142857142857142", "False" ], [ "9", "3", "4", "12", "5", "0", "0", "0", "1", "0", "0", "0", "0", "15", "0", "0", "0", "1", "0", "0", "0", "0", "1.2962962962962963", "False", "3.9121138909722304", "0.4444444444444444", "0.18518518518518517", "True" ], [ "10", "1", "3", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "1.5", "False", "2.98345859334435", "0.0", "0.1875", "False" ], [ "11", "1", "2", "0", "2", "0", "0", "0", "0", "0", "0", "0", "0", "4", "0", "0", "0", "0", "0", "0", "0", "0", "1.5714285714285714", "False", "3.182005814760214", "0.0", "0.14285714285714285", "False" ], [ "12", "0", "1", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "6", "0", "0", "0", "0", "0", "0", "0", "0", "1.7272727272727273", "False", "2.7321588913645702", "0.0", "0.09090909090909091", "False" ], [ "13", "1", "1", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "6", "0", "0", "0", "0", "0", "0", "0", "0", "1.5333333333333334", "False", "3.2402239289418513", "0.0", "0.06666666666666667", "False" ], [ "14", "1", "2", "0", "2", "0", "0", "0", "0", "0", "0", "0", "0", "8", "0", "0", "0", "0", "0", "0", "0", "0", "1.5333333333333334", "False", "3.3232314287976203", "0.0", "0.13333333333333333", "False" ], [ "15", "0", "1", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1.6666666666666667", "False", "3.2516291673878226", "0.0", "0.08333333333333333", "False" ], [ "16", "2", "3", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "4", "0", "0", "0", "0", "0", "0", "0", "0", "1.3636363636363635", "False", "3.4428621651554656", "0.0", "0.13636363636363635", "False" ], [ "17", "0", "1", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "1.7272727272727273", "False", "3.277613436819116", "0.0", "0.09090909090909091", "False" ], [ "18", "0", "1", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "1.6153846153846154", "False", "3.3927474104487847", "0.0", "0.07692307692307693", "False" ], [ "19", "0", "2", "0", "2", "0", "0", "0", "0", "0", "0", "0", "0", "7", "0", "0", "0", "0", "0", "0", "0", "0", "1.6153846153846154", "False", "3.180832987205441", "0.0", "0.15384615384615385", "False" ], [ "20", "3", "1", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "15", "0", "0", "0", "0", "0", "0", "0", "0", "1.3076923076923077", "False", "3.873140679513133", "0.0", "0.038461538461538464", "False" ], [ "21", "1", "3", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "5", "0", "0", "0", "0", "0", "0", "0", "0", "1.5333333333333334", "False", "3.189898095464287", "0.0", "0.2", "False" ], [ "22", "1", "2", "0", "2", "0", "0", "0", "0", "0", "0", "0", "0", "5", "0", "0", "0", "0", "0", "0", "0", "0", "1.5333333333333334", "False", "3.373557262275185", "0.0", "0.13333333333333333", "False" ], [ "23", "2", "3", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "4", "0", "0", "0", "0", "0", "0", "0", "0", "1.2", "False", "3.3174058114255174", "0.0", "0.12", "False" ], [ "24", "3", "3", "0", "7", "0", "2", "0", "0", "0", "0", "0", "0", "6", "0", "0", "0", "2", "0", "0", "0", "0", "1.0714285714285714", "False", "4.005678590456677", "0.0", "0.16666666666666666", "False" ], [ "25", "2", "3", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "4", "0", "0", "0", "0", "0", "0", "0", "0", "1.380952380952381", "False", "3.4992275417233567", "0.0", "0.14285714285714285", "False" ], [ "26", "0", "2", "0", "2", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1.6153846153846154", "False", "3.3927474104487847", "0.0", "0.15384615384615385", "False" ], [ "27", "3", "3", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "4", "0", "0", "0", "0", "0", "0", "0", "0", "1.2962962962962963", "False", "3.8841550945958057", "0.0", "0.1111111111111111", "False" ], [ "28", "0", "1", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1.6666666666666667", "False", "3.418295834054489", "0.0", "0.08333333333333333", "False" ], [ "29", "2", "3", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "4", "0", "0", "0", "0", "0", "0", "0", "0", "1.3333333333333333", "False", "3.5535088547976788", "0.0", "0.125", "False" ], [ "30", "2", "3", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "4", "0", "0", "0", "0", "0", "0", "0", "0", "1.4", "False", "3.384183719779189", "0.0", "0.15", "False" ], [ "31", "2", "2", "0", "2", "0", "0", "0", "0", "0", "0", "0", "0", "5", "0", "0", "0", "0", "0", "0", "0", "0", "1.3478260869565217", "False", "3.555533151426996", "0.0", "0.08695652173913043", "False" ], [ "32", "2", "2", "0", "2", "0", "0", "0", "0", "0", "0", "0", "0", "9", "0", "0", "0", "0", "0", "0", "0", "0", "1.4", "False", "3.4841837197791885", "0.0", "0.1", "False" ], [ "33", "0", "1", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "2.0", "False", "2.75", "0.0", "0.125", "False" ], [ "34", "3", "3", "0", "5", "0", "0", "0", "0", "0", "0", "0", "0", "9", "0", "0", "0", "2", "0", "0", "0", "0", "1.2222222222222223", "False", "4.141604167868593", "0.0", "0.1388888888888889", "False" ], [ "35", "3", "1", "3", "5", "0", "0", "0", "0", "0", "0", "0", "0", "18", "0", "0", "0", "0", "0", "0", "0", "0", "1.2258064516129032", "False", "3.897587036123537", "0.0967741935483871", "0.16129032258064516", "False" ], [ "36", "3", "1", "0", "2", "0", "0", "0", "0", "0", "0", "0", "0", "26", "0", "0", "0", "0", "0", "0", "0", "0", "1.1714285714285715", "False", "3.808173561015608", "0.0", "0.05714285714285714", "False" ], [ "37", "2", "1", "0", "2", "0", "0", "0", "0", "0", "0", "0", "0", "12", "0", "0", "0", "0", "0", "0", "0", "0", "1.4", "False", "3.6841837197791887", "0.0", "0.1", "False" ], [ "38", "2", "1", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "11", "0", "0", "0", "0", "0", "0", "0", "0", "1.4", "False", "3.446439344671015", "0.0", "0.05", "False" ], [ "39", "1", "2", "0", "2", "0", "0", "0", "0", "0", "0", "0", "0", "4", "0", "0", "0", "0", "0", "0", "0", "0", "1.5", "False", "3.25", "0.0", "0.125", "False" ], [ "40", "1", "2", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "10", "0", "0", "0", "1", "0", "0", "0", "0", "1.4705882352941178", "False", "3.4548223999466066", "0.0", "0.17647058823529413", "False" ], [ "41", "1", "1", "0", "1", "0", "0", "0", "0", "1", "0", "0", "0", "9", "0", "0", "0", "0", "0", "0", "0", "0", "1.5714285714285714", "False", "3.128085278891395", "0.0", "0.07142857142857142", "False" ], [ "42", "2", "3", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "7", "0", "0", "0", "0", "0", "0", "0", "0", "1.4", "False", "3.2841837197791888", "0.0", "0.15", "False" ], [ "43", "2", "1", "3", "3", "0", "0", "0", "0", "0", "0", "0", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "1.4", "False", "4.1219280948873624", "0.15", "0.15", "False" ], [ "44", "1", "1", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "9", "0", "0", "0", "0", "0", "0", "0", "0", "1.5333333333333334", "False", "3.2402239289418517", "0.0", "0.06666666666666667", "False" ], [ "45", "2", "1", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "10", "0", "0", "0", "0", "0", "0", "0", "0", "1.4", "False", "3.5841837197791886", "0.0", "0.05", "False" ], [ "46", "0", "2", "0", "2", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1.6153846153846154", "False", "3.238901256602631", "0.0", "0.15384615384615385", "False" ], [ "47", "2", "3", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "4", "0", "0", "0", "0", "0", "0", "0", "0", "1.4", "False", "3.446439344671015", "0.0", "0.15", "False" ], [ "48", "2", "1", "0", "2", "0", "0", "0", "0", "0", "0", "0", "0", "17", "0", "0", "0", "0", "0", "0", "0", "0", "1.32", "False", "3.3688840705376357", "0.0", "0.08", "False" ], [ "49", "2", "3", "0", "3", "0", "0", "0", "0", "0", "0", "0", "0", "4", "0", "0", "0", "0", "0", "0", "0", "0", "1.4", "False", "3.6841837197791887", "0.0", "0.15", "False" ] ], "shape": { "columns": 27, "rows": 6995056 } }, "text/html": [ "
| \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", "is_common_tld | \n", "... | \n", "has_query | \n", "query_length | \n", "query_param_count | \n", "url_shorteners | \n", "compression_ratio | \n", "check_similar_brand | \n", "entropy | \n", "digit_ratio | \n", "special_char_ratio | \n", "is_ip_address | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "1 | \n", "3 | \n", "0 | \n", "3 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.444444 | \n", "False | \n", "3.308271 | \n", "0.000000 | \n", "0.166667 | \n", "False | \n", "
| 1 | \n", "2 | \n", "3 | \n", "0 | \n", "3 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.421053 | \n", "False | \n", "3.471354 | \n", "0.000000 | \n", "0.157895 | \n", "False | \n", "
| 2 | \n", "2 | \n", "2 | \n", "0 | \n", "2 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.380952 | \n", "False | \n", "3.272804 | \n", "0.000000 | \n", "0.095238 | \n", "False | \n", "
| 3 | \n", "2 | \n", "3 | \n", "0 | \n", "3 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.363636 | \n", "False | \n", "3.533771 | \n", "0.000000 | \n", "0.136364 | \n", "False | \n", "
| 4 | \n", "3 | \n", "2 | \n", "2 | \n", "5 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.242424 | \n", "False | \n", "3.772450 | \n", "0.060606 | \n", "0.151515 | \n", "False | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 6995051 | \n", "0 | \n", "2 | \n", "0 | \n", "2 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.800000 | \n", "False | \n", "2.921928 | \n", "0.000000 | \n", "0.200000 | \n", "False | \n", "
| 6995052 | \n", "2 | \n", "2 | \n", "0 | \n", "2 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.400000 | \n", "False | \n", "3.684184 | \n", "0.000000 | \n", "0.100000 | \n", "False | \n", "
| 6995053 | \n", "3 | \n", "2 | \n", "5 | \n", "4 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.100000 | \n", "False | \n", "4.130881 | \n", "0.100000 | \n", "0.080000 | \n", "False | \n", "
| 6995054 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.571429 | \n", "False | \n", "3.324863 | \n", "0.000000 | \n", "0.071429 | \n", "False | \n", "
| 6995055 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.444444 | \n", "False | \n", "3.614369 | \n", "0.000000 | \n", "0.055556 | \n", "False | \n", "
6995056 rows × 27 columns
\n", "| \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", "is_common_tld | \n", "... | \n", "has_query | \n", "query_length | \n", "query_param_count | \n", "url_shorteners | \n", "compression_ratio | \n", "check_similar_brand | \n", "entropy | \n", "digit_ratio | \n", "special_char_ratio | \n", "is_ip_address | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3132 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.0 | \n", "0 | \n", "3.0 | \n", "0.0 | \n", "0.1 | \n", "NaN | \n", "
| 4387 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.0 | \n", "0 | \n", "3.0 | \n", "0.0 | \n", "0.1 | \n", "NaN | \n", "
| 4427 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.0 | \n", "0 | \n", "3.0 | \n", "0.0 | \n", "0.1 | \n", "NaN | \n", "
| 4558 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.0 | \n", "0 | \n", "3.0 | \n", "0.0 | \n", "0.1 | \n", "NaN | \n", "
| 4886 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.0 | \n", "0 | \n", "3.0 | \n", "0.0 | \n", "0.1 | \n", "NaN | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 6994712 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.0 | \n", "0 | \n", "3.0 | \n", "0.0 | \n", "0.1 | \n", "NaN | \n", "
| 6994876 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.0 | \n", "0 | \n", "3.0 | \n", "0.0 | \n", "0.1 | \n", "NaN | \n", "
| 6994893 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.0 | \n", "0 | \n", "3.0 | \n", "0.0 | \n", "0.1 | \n", "NaN | \n", "
| 6994899 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.0 | \n", "0 | \n", "3.0 | \n", "0.0 | \n", "0.1 | \n", "NaN | \n", "
| 6994908 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1.0 | \n", "0 | \n", "3.0 | \n", "0.0 | \n", "0.1 | \n", "NaN | \n", "
56557 rows × 27 columns
\n", "| \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", "