2025.07.01 본_캠프 93일차

민동·2025년 7월 1일
2

본캠프

목록 보기
74/74

이상치 탐지에 비상이 걸려 튜터님이 제안한 새로운 방식으로 진행을 하게 됐다..

튜터님이 제시한 방법

  1. 정상데이터 100개로만 -> isolation forest 학습
  2. isolation forest th정할 때 quantile 99.9로 설정하기
  3. 그리고 나서 정상데이터 100개 (이미학습한 데이터)로 적용해서 다 정상이라 판단하는지 확인기
  4. 이상데이터 100개에 대해서도 다 이상이라 판단하는지 확인하기

학습했던 데이터를 한번 더 평가해 썼기 때문에 당연히 잘 나와야 함
-> 100개 더 정상데이터 수집해서 한번 더 정상 잘 예측하는지 확인은 해줘야 함

그래서 일단 새로운 데이터 100개를 수기로 뽑기를 결정했다.

(새로운 노가다의 장이 열렸다...)

내가 진행한 방식
1. 싱크홀이 발생했던 곳 피하기

  1. 전에 찍은 정상 데이터 피하기

  2. 지하철 노선 근처 피하기

  3. 대규모 재개발 지역 피하기

  4. 선정한 위험 지역 최대한 피하기

  5. 산,강 데이터 피하기

  6. 구별 정상데이터 역으로 비율 구해서 찍기

주소로 위도,경도 채우기


# 비어있는 주소 채우기-> 카카오 local API
import requests

# 카카오 REST API 키
KAKAO_API_KEY = "3493c8fed3620a6727c1304b2711e2c0"
headers = {"Authorization": f"KakaoAK {KAKAO_API_KEY}"}

# 함수: 주소 → 위경도
def get_lat_lon(address):
    url = "https://dapi.kakao.com/v2/local/search/address.json"
    params = {"query": address}
    response = requests.get(url, headers=headers, params=params)
    
    if response.status_code == 200:
        result = response.json()["documents"]
        if result:
            lat = float(result[0]["y"])
            lon = float(result[0]["x"])
            return lat, lon
    return None, None

# lat 또는 lon이 비어 있는 경우만 처리
for i, row in df.iterrows():
    if pd.isna(row['lat']) or pd.isna(row['lon']):
        address = row['사고발생위치']
        lat, lon = get_lat_lon(address)
        df.at[i, 'lat'] = lat
        df.at[i, 'lon'] = lon

# 결과 확인
print(df[['사고발생위치', 'lat', 'lon']])
profile
아자아자

2개의 댓글

comment-user-thumbnail
2025년 7월 1일

포인트 받으면 안 되겠는데..

1개의 답글