출처 : 에이블스쿨 홈페이지

블로그를 시작한지 얼마 되지도 않은 것 같은데, 에이블스쿨이 종료되었습니다... 6개월간 같은반 에이블러분들과 힘든일도, 추억도 많았기에 에이블스쿨 졸업 후기를 써보려고 합니다.

 

○ 병행을 통해 달성한 것

사진이 흐린건 기분탓입니다

금융 아이디어 공모전 장려상 수상, AICE자격증, 빅데이터 분석기사(필기), ADsP 자격증 취득 을 달성했습니다.

비록 빅데이터 분석기사 실기는 떨어져 아쉽지만, 단기간에 많은 자격증과 공모전 수상까지 했다는 점이 뿌듯하게 다가오네요.이는 아무래도 에이블스쿨 DX커리큘럼 덕분에 '데이터 분석 - IT 인프라 - 제안서 작성' 이라는 컨설턴트 풀스택을 쌓았기에 이뤄낼 수 있었던 결과라고 생각합니다.

 

에이블스쿨 시작 이전 다짐했던 것들을 모두 달성할 수 없었더라도 금융경력 + IT직무역량 을 실현할 수 있었던 6개월이었기에 보람있던 나날이었습니다.

 

빅프로젝트 결과

DX 29조원 분들 모두 고생하셨습니다!!

저희 조는 '영유아를 위한 행복한 보육환경 조성 솔루션'을 목표로 프로젝트를 진행했지만, 아쉽게도 우수상, 최우수상같은 결과물에 기반한 상을 수상하지는 못했습니다. 자칫 식상하게 보일 수 있는 주제로 접근했고, 저희 조만의 특출난 솔루션이 전달되지 않은 탓이겠지요...

그래도 에이블스쿨 핵심가치인 '실력과 프로정신'을 인정받아 Excellence 상을 수상할 수 있었습니다.

 

수상내역을 보니, '주제의 창의성', '프로젝트 구현 여부', '제안 PPT', '인프라의 구체적 설명', 'KT 서비스와 기기의 설명' 이 중점으로 이루어졌던 것 같습니다.(물론 제 뇌피셜입니다)

 

 

우수 에이쁠 기자단

당일이 아닌 택배로 수령했습니다

우수한 에이블러인 'Dean's 에이블러 상', 코딩 마스터즈에서 실력을 발휘하여 받는 '코딩 마스터즈 상', 기자단 및 반장 활동을 열심히 진행해서 받는 '우수 에이쁠 상' 중에서 우수 에이쁠 상을 수상했습니다!!

 

기자단을 한다고 모두 받는 상도 아니고, 블로그를 꾸준히 업로드한게 아니었어서 사실 어떻게 받았는지 모르겠지만 ㅎㅎ 하나하나 업로드 할때마다 마음을 듬뿍 담아 썼던게 전해지지 않았나 생각합니다.

 

에이블스쿨 덕분에 난생 처음 블로그도 써보고, 이래저래 새로운 도전을 하면서 많이 격려받은것 같아 고마운 마음이 듭니다. 앞으로도 고-급 기술블로거로 거듭날때까지 이어서 작성해보겠습니다.

 

우수 기자단 기념 9반 반장님과의 한컷

 

○ 잡페어

서울의 호텔에서 진행된 잡페어

KT, BC카드, K뱅크, KT cs, 오케스트로 등 굴지의 KT 산하 기업과 협력 기업들이 모여 잡페어를 진행했습니다.

스탬프를 5개 먼저 모으면 캐리어와 같은 선물도 증정했는데 저는 선물보다 잡페어 내용이 더 중요하다고 생각해서 질문지도 많이 만들어갔겠다, 선착순 선물은 애초에 포기하고 시작했지만...

잡페어의 결과는 조금 아쉬웠습니다. 기업들의 채용 의지가 많이 부족해 보였거든요. KT의 경영이슈가 문제인지, 시장상황이 문제인지는 모르겠지만 이래저래 아쉬움을 많이 남겼던 잡페어였습니다.

KT클라우드는 수도권만 진행하고 아예 없기도 했습니다...

사진도 뽑을 수 있으니, 추억을 남겨보아요♡

 

○ 요즘 근황은?

7월 18일 마지막 체크아웃과 함께 KT 채용공고가 시작되었습니다. 에이블전형 채용공고이기에 심혈을 기울여서 임할 예정입니다.

1기나 2기 선배분들은 빅프로젝트 중간에 채용공고가 나왔다고 하는데 얼마나 힘들었을지... 4기때는 어떻게 변할지 모르겠습니다. 

 

 

쉬지않고 달려왔지만, 힘들었다는 기억보다 재미있었다는 추억이 더 많이 남는 6개월이었습니다. 앞으로 저와 함께 DX 컨설턴트의 꿈을 꾸는 차기 에이블러 여러분들께서도 달리는 동안 지치지 않고 꼭 바라는 바를 이룰 수 있는 시간을 만드셨으면 좋겠습니다.

 

이상 에이블스쿨 관련 블로그 업로드를 마칩니다. 6개월간 물심양면으로 도와주신 모든 에이블러, 에이블스쿨 관계자 여러분 감사합니다.

이전에 포스팅한 "단계구분를 그려보자 2"에서는 국토정보플랫폼에서 인구데이터와 격자데이터를 동시에 받았습니다. 이번에는 국토정보플랫폼의 성남시 100M기준 격자데이터와 전국 어린이보호구역 데이터를 합쳐보겠습니다.

 

#기본 패키지
import numpy as np
import pandas as pd
import json
import folium
import geopandas as gpd
from geopandas import GeoDataFrame  #메인
from shapely.geometry import Polygon, LineString, Point  #격자, 선, 점
from fiona.crs import from_string

# 좌표 바꾸는 패키지
from pyproj import Transformer
import pyproj

# 심신의 안정 찾기(경고창 안뜨게 하기)
import warnings
warnings.filterwarnings('ignore')

#성남시 100m2 격자 shape파일
seongnam = gpd.GeoDataFrame.from_file('./shape/seongnam_100.shp', encoding='utf-8')
seongnam.crs

기본 패키지를 불러오고, 성남시의 좌표정보를 확인해봅시다.

 

EPSG가 5179인 것을 확인할 수 있습니다.

seongnam = seongnam.to_crs(epsg = 4326)
print(seongnam.shape)

EPSG를 4326(경위도 형태) 로 변경하고, shape를 통해 index와 column을 확인합니다.

14513개와 gid, lbl, val, geometry 컬럼이 확인됩니다. 저번에 포스팅한 공간정보, 인구 수, geometry(GeoPandas 필수요소) 입니다.

이후, 전국의 어린이 보호구역 데이터를 확인합시다.

경위도가 따로 나뉘어져 있는 DataFrame입니다.

GeoPandas로 변경하기 위해서는 geometry가 필요하기 때문에, 경위도를 병합하는 과정을 진행하겠습니다.

data['geometry'] = data.apply(lambda row : Point([row['경도'], row['위도']]), axis = 1)
data.head(3)

이렇게 확인해보면

geometry columns 경위도가 들어가 있는 것을 확인할 수 있습니다.

이제 GeoPandas로 변경해줍시다.

data = gpd.GeoDataFrame(data, geometry = 'geometry', crs = 'ESPG:4326')
data.crs

ESPG 4326형태의 GeoDataFrame으로 변경한 뒤, 확인하면 변경이 잘 된 것을 확인할 수 있습니다.

이렇게 말이죠.

우리가 단계구분도로 나타내고자 하는 데이터는 어린이보호구역이 100m2로 나눈 격자단위 구역에 몇개 들어가 있는가 입니다. data 변수로 지정한 GeoDataFrame은 전국 어린이보호구역의 좌표이니, '어린이보호구역'이라는 컬럼을 추가하고 1을 지정하겠습니다.

data['어린이보호구역'] == 1
data.head(3)

우리가 여기에서 필요한 데이터는 geometry컬럼과 어린이보호구역컬럼 두 개 뿐입니다. 해당 데이터들만 분리해 공간결합합시다.

tmp = data[['geometry','어린이보호구역']]
df = gpd.sjoin(seongnam, tmp, how = 'left', predicate = 'intersects')

print('공간결합 전 데이터프레임 형태 : ', seongnam.shape, sep = '')
print('=' * 80)
print('공간결합 전 데이터프레임 형태 : ', df.shape, sep = '')

이렇게 진행하면 다음과 같은 결과를 확인할 수 있습니다.

차이나는 index가 5개 있습니다.
글씨 진짜 못쓰네요

sjoin은 merge와 유사한 함수인데, 다음과 같이 이해하면 편하겠습니다.

그러면 여기에서 드는 의문점. 'column개수가 늘어난건 그렇다 쳐도, index는 왜 늘어났을까?

이는 value_counts()로 확인 가능합니다.

tmp2 = df.groupby(by = 'gid', as_index=False)['어린이보호구역'].count()
tmp2.shape
tmp2['어린이보호구역'].value_counts()

를 통해 임시 DataFrame인 tmp2의 데이터를 확인하면 다음과 같은 개수 확인이 가능합니다.

이때 0은 내부에 어린이 보호구역이 하나도 없는 격자 개수, 1은 1개, 2는 2개를 의미합니다. 그래서 공간결합 후 5개의 index가 추가된 것이죠.

그래서 primary key 역할을 하는 'gid' 컬럼을 기준으로 중복을 제거하면

df = pd.DataFrame(df).drop_duplicates(subset = 'gid')
# 필요없는 컬럼 제거
df.drop(columns=['index_right', '어린이보호구역'], axis = 1, inplace = True)
df

최초 index개수와 같아진 것을 확인할 수 있습니다. 이제 합쳐봅시다.

# tmp3 데이터프레임의 '금연구역'값을 df와 합치기
df = pd.merge(df, tmp2, how = 'left', on = 'gid')
# 확인
df['어린이보호구역'].value_counts()

맨 우측에 어린이 보호구역 column이 기존 df에 추가된 것을 확인할 수 있습니다. 이제 GeoDataFrame으로 변경한 뒤 folium을 그려봅시다.

df = gpd.GeoDataFrame(df)
# folium map 생성
m = folium.Map(location=['37.4439', '127.1389'], # 성남시청
               zoom_start=11,
               tiles='OpenStreetMap')

# Choropleth 맵 생성
folium.Choropleth(
    
    geo_data = df,                      # Choropleth 맵에 사용될 지리 정보
    data = df,                          # Choropleth 맵에 사용될 데이터
    columns = ['gid', '어린이보호구역'],       # 데이터에서 사용될 열 이름 
    key_on='feature.properties.gid',    # GeoJson에서 고유 식별자로 사용할 (지리적 영역을 구분할) 열 이름   
    
    fill_color='YlOrRd',                # 색상 팔레트 설정  예) 'YlGnBu', 'YlOrRd'
    fill_opacity= 0.7,                  # 채우기 투명도 설정 / 0 (투명) ~ 1 
    bins= 3,                           # 색 구간
    
    line_color = 'black',               # 경계선 색
    line_opacity = 0.05,                # 경계선 투명도
    
    nan_fill_color = 'white',           # 결측치 색
    nan_fill_opacity = 0,               # 결측치 투명도 - 0 (완전투명)
    
    name = '성남시 어린이보호구역',              # 이름 
    legend_name = '성남시 어린이보호구역'        # 범례 이름 설정
).add_to(m)

# 레이어 컨트롤 추가
folium.LayerControl().add_to(m)


# 지도 띄우기
m

드디어 우리는 성남시 100제곱미터단위 격자구역의 어린이보호구역을 띄우는데 성공했습니다!

0개가 노란색, 1개가 주황색, 2개가 붉은색 입니다.

하나하나씩 찾으면서 했으면 오래걸렸을 포스팅인데, 동기 에이블러 덕분에 빠르게 끝낼 수 있었습니다. 다시한번

장훈햄 감사합니다!

6월 현재 빅프로젝트가 한창입니다. 에이블스쿨 시작 전 KT만의 데이터를 기대했지만 이제는 공공데이터만으로 프로젝트를 진행해야 한다는걸 알기에... 공공데이터 API를 가져와보려고 합니다. 오늘은 성남시 우회전 사각지대 데이터를 가져오도록 하겠습니다.

 

물론 DX커리큘럼 과정에서도 배웁니다! 잠깐 배우고 까먹어서 그렇지...

 

 

● 시작에 앞서

key, json에 대해서만 알아봅시다.

API에 대한 이론까지 알 필요는 없고, key값과 json 이나 xml만 알아도 충분할 듯 합니다.

- key는 API에서 데이터를 제공하기 위해 받아오는 사용자의 정보로, API에 등록되어있는 key값과 사용자의 key값이 같아야지만 정보교환이 가능합니다. 공공데이터포털에 회원가입 이후, 마이페이지의

빨간색 박스 안에 있는 인증키가 key값이 되겠습니다. 인증키 복사(Encoding)을 통해 일괄복사도 가능합니다.

 

- json과 xml의 경우, 반정형 데이터입니다. 원래 xml이 주로 사용되었는데, 요새는 json으로 바뀌고 있는 추세이니 이번 포스팅은 json을 기준으로 진행하겠습니다. 파이썬의 json 라이브러리를 통해 보기 좋은 형태로 받아올 수 있습니다.

 

 

● 데이터 내려받기 시작

물론 Base URL을 통해 받을수도 있습니다.

검색으로 확인된 성남시의 우회전 파일데이터 입니다. 하단 API목록의 GET을 클릭합시다.

 

1시 방향의 Open API 실행 준비를 클릭하면 해당 빈칸들을 메꿀 수 있습니다.

우리가 받을 타입인 json을 입력하고, 이전에 확인한 인증키를 입력합시다. 페이지번호는 1, 한 페이지 결과 수는 1000으로 입력한 뒤, OpenAPI 호출을 진행합니다.

하단에 다음과 같은 URL들이 나타납니다. Request URL 을 복사합시다.

이후, 코드를 입력할 차례입니다.

import pandas as pd
import urllib.request # URL 요청 라이브러리
import json           # JSON 변환 라이브러리
url = f"http://apis.data.go.kr/3780000/rightTurnService/rightTurnList?type=json&serviceKey={key}&pageNo=1&numOfRows=1000"

나름의 보안을 위해 key값은 제외시키고 올렸습니다. f string 문장인, key값을 변수에 넣어도 무방합니다.

이후

response = urllib.request.urlopen(url) # 응답한 URL을 확인
json_str = response.read().decode('utf-8') # 한국어 디코딩
json_object = json.loads(json_str)  # json으로 로드
json_object

다음과 같이 진행하면

아래와 같은 json타입의 글을 확인할 수 있습니다. 여기서 body 구조를 살펴봅시다.

body(key) : 딕셔너리(value)

items(key) : 딕셔너리(value)

item(key) : 리스트(value)

리스트 내부의 딕셔너리

왠지 모르게 리스트 내부의 마지막 딕셔너리 key : value가 DataFrame의 column, value 가 될것 같은 느낌입니다.

그럼 리스트를 받아와야 하는데, 이 리스트는 'body'내부의 'items'내부의 'item'내부의 value입니다.

이제 리스트를 받아와 봅시다. pandas의 json_normalize함수를 이용해 위의 json파일을 pandas화 시키겠습니다.

signal = pd.json_normalize(json_object['body']['items']['item'])
signal

 다음과 같이 ['body']['items']['item'] 순서로 넣어주고 signal을 확인하면 다음과 같은 자료를 볼 수 있습니다.

 

 

 

일반 csv파일 통해서 받았으면 image파일까지 받느라 느렸을텐데 다행입니다.

물론 BaseURL과 key값, 페이지 수 조합으로 받을수도 있지만 훨씬 편리한 UI를 공공데이터포털에서 제공하고 있으니, 자주 활용해 봅시다.

단계구분도의 가장 쉬운 데이터는 역시나 인구수가 아닐까 싶습니다. 서울특별시 관악구의 인구수를 확인해봅시다.

 

● 데이터 다운로드

국토정보플랫폼의 국토정보맵에서 국토통계지도를 확인합니다.

 

 

11시방향과 같이 검색을 진행합니다.

※ 격자로 선택하는 경우, 500M 이하 구역으로 자를 때 구별 미만의 단위로만 가능합니다.

다음과 같이 형성된 데이터를 다운로드합니다.

.msid파일은 필요없습니다

 

● 코딩

패키지를 import 합니다

#기본 패키지
import numpy as np
import pandas as pd
import json
import folium
import geopandas as gpd
from geopandas import GeoDataFrame  #메인
from shapely.geometry import Polygon, LineString, Point  #격자, 선, 점
from fiona.crs import from_string

# 좌표 바꾸는 패키지
from pyproj import Transformer
import pyproj

# 심신의 안정 찾기(경고창 안뜨게 하기)
import warnings
warnings.filterwarnings('ignore')

 

shape 파일을 불러옵니다. (하나의 상위 폴더에 모두 넣어주는게 보기 편합니다.)

shape = gpd.GeoDataFrame.from_file('shp경로', encoding = 'utf-8')

 

# shape.crs를 통해 shp파일의 설명을 확인할 수 있습니다.

# shape.shape나 shape.crrs를 통해서도 가능합니다

# shape.head(n)을 통해서 index별 데이터 확인도 가능합니다(일반 dataframe과 유사합니다)

 

이런식으로 구성되어 있는것을 확인할 수 있습니다.

여기서 gid는 국가지점번호, lbl과 val은 인구수를 의미합니다.

※ geometry는 geopandas를 위해 꼭 필요한 컬럼으로, 단계구분도를 그려보자 1에서 설명한 EPSG마다 입력되는 형태가 다릅니다.

EPSG형태는 4326의 경위도가 기본인데, 조금 다른것 같습니다. 바꿔보겠습니다.

 

조금더 편-안해졌습니다.

경도, 위도의 순서로 배치된 것을 확인할 수 있습니다.

이후 folium을 사용하여 다음과 같은 코드를 입력하면

# folium 지도 불러오기
m = folium.Map(location=[ '37.478069', '126.951523'], # 관악구청 경위도
               zoom_start=12.5,
               tiles='OpenStreetMap')
folium.GeoJson(
    shape,
    style_function = lambda x : style
).add_to(m)


# 인구별 단계구분도를 띄우기 위한 Polygon (다각형) 스타일 지정
style = {'fillColor': 'orange',   # 채우는 색
         'fillOpacity': 0.5,     # 채우기 투명도
         'color': 'black',        # 선 색
         'opacity' : 0.05,        # 선 투명도
         'weight': 1              
         }

# Choropleth 맵 생성
folium.Choropleth(
    
    geo_data = shape,                      # Choropleth 맵에 사용될 지리 정보
    data = shape,                          # Choropleth 맵에 사용될 데이터
    columns = ['gid', 'val'],       # 데이터에서 사용될 열 이름(구역, 인구 수) 
    key_on='feature.properties.gid',    # GeoJson에서 고유 식별자로 사용할 (지리적 영역을 구분할) 열 이름   
    
    fill_color='YlOrRd',                # 색상 팔레트 설정  예) 'YlGnBu', 'YlOrRd'
    fill_opacity= 0.7,                  # 채우기 투명도 설정 / 0 (투명) ~ 1 
    bins= 14,                           # 색 구간
    
    line_color = 'black',               # 경계선 색
    line_opacity = 0.05,                # 경계선 투명도
    
    nan_fill_color = 'white',           # 결측치 색
    nan_fill_opacity = 0,               # 결측치 투명도 - 0 (완전투명)
    
    name='관악구 총인구',              # 이름 
    legend_name='관악구 총인구'        # 범례 이름 설정
).add_to(m)

# 레이어 컨트롤 추가
folium.LayerControl().add_to(m)

# html 파일로 저장
# m.save('관악구 단계구분도.html')   
# 지도 띄우기
m

아래와 같은 단계구분도를 그릴 수 있습니다.

 

다음 포스팅은 layer들을 합치는 작업을 진행하겠습니다.

공모전도 나가고, 코딩교육을 받다 보니 지도 관련해서 코딩을 해야하는 상황이 많았습니다.

하지만 교육과정에서는 알려주지 않았기에... 동기 에이블러님께 배운 내용을 공유하고자 합니다.

 

장훈햄 감사합니다!!

 

자료출처 : https://geopandas.org/en/stable/about/logo.html

GeoPandas의 경우 geographic과 pandas의 합성어. 컴퓨터 지도구현을 위해 pandas 형태로 만들어진 프로그램입니다.

folium를 구체화하기 위해 꼭 필요한 기능이라고 생각하면 좋겠다.

 

● 설치

설치 오류 잡는데만 사흘이 걸렸습니다............

(https://codedragon.tistory.com/9556 를 참고했습니다)

 

꼭! 순서대로 진행해야 합니다!!!

 

1. python 버전 확인

2. 프로그램 다운로드

3. pyproj 설치

4. Shapely 설치

5. GDALL 설치

6. Fiona 설치

7. Geopandas 설치

 

1. python 버전 확인

말 그대로 python 버전을 확인합니다. 저는 anaconda prompt에서 python --version을 통해 버전을 확인했습니다.

또한, window x64인지, x32인지 확인이 필요합니다.

 

이후 설치하는 모든 파일은 python 버전과 window 버전에 맞춰서 설치가 필요합니다.

예시로, python 3.7.1버전이라면 cp37을 받아주시면 됩니다.

 

2. 프로그램 다운로드

Shapely, GDALL, Fiona, Geopandas

https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely

 

Archived: Python Extension Packages for Windows - Christoph Gohlke

Archived: Python Extension Packages for Windows - Christoph Gohlke by Christoph Gohlke. Updated on 26 June 2022 at 07:27 UTC. This page provides 32 and 64-bit Windows binaries of many scientific open-source extension packages for the official CPython

www.lfd.uci.edu

https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal

 

Archived: Python Extension Packages for Windows - Christoph Gohlke

Archived: Python Extension Packages for Windows - Christoph Gohlke by Christoph Gohlke. Updated on 26 June 2022 at 07:27 UTC. This page provides 32 and 64-bit Windows binaries of many scientific open-source extension packages for the official CPython

www.lfd.uci.edu

https://www.lfd.uci.edu/~gohlke/pythonlibs/#fiona

 

Archived: Python Extension Packages for Windows - Christoph Gohlke

Archived: Python Extension Packages for Windows - Christoph Gohlke by Christoph Gohlke. Updated on 26 June 2022 at 07:27 UTC. This page provides 32 and 64-bit Windows binaries of many scientific open-source extension packages for the official CPython

www.lfd.uci.edu

https://pypi.org/project/geopandas/#files

 

geopandas

Geographic pandas extensions

pypi.org

를 버전에 맞게 다운로드합니다.

 

3 ~ 7 설치

anaconda prompt에서 진행합니다.

C:\User> pip install pyproj

C:\User> pip install Shapely-1.7.1-cp38-cp38-win_amd64.whl

C:\User> pip install GDAL-3.1.4-cp38-cp38-win_amd64.whl

C:\User> pip install Fiona-1.8.18-cp38-cp38-win_amd64.whl

C:\User> pip install geopandas-0.8.1-py2.py3-none-any.whl

 

이후 파이썬이 잘 돌아가는지 확인합니다.

 

 

● 확장자

geopandas 활용 및 이용을 위해선 shp, prj, dbf, shx라는 4가지 파일이 필요합니다.

shp는 shape

prj는 좌표

dbf는 속성데이터

shx는 공간 인덱스 파일

위 파일들은 모두 같은 경로에 설치가 필요합니다. 우리나라의 경우 이러한 파일 정비가 비교적 잘 되어있는 편으로,

 

국토정보플랫폼 https://map.ngii.go.kr/ms/map/NlipMap.do?tabGb=statsMap

대한민국 최신 행정구역 http://www.gisdeveloper.co.kr/?p=2332

 

등의 경로에서 파일 다운로드가 가능합니다.

 

 

 좌표계

CRS(Coordinate Reference System)으로, 도대체 왜인지는 모르겠는데 종류가 많습니다.

그래서 공간좌표계를 일치시켜야 하는 경우가 많이 생기는데, 공간좌표계는 다음과 같습니다.

BESSEL /위도 EPSG:4004, EPSG:4162
WGS84 /위도 EPSG:4326, EPSG:4166
서부원점(GRS80) EPSG:5185
중부원점(GRS80) EPSG:5181, EPSG:5186
동부원점(GRS80) EPSG:5187
동해(울릉)원점(GRS80) EPSG:5188
UTM-K (GRS80) EPSG:5179
Google Mercator EPSG:900913

여기서 기준은 ESPG:4326(경위도)이며, 네이버지도의 경우 ESPG:5179, 카카오맵은 ESPG:5181 입니다.

* ESPG정보가 없는 괘씸한 파일들이 간혹 있는데, 변수명.to_crs('ESPG:X')를 통해 X값으로 ESPG설정이 가능합니다.*

 

1부는 여기까지!

DX는 자고로 코딩도 중요하지만, 도메인 지식을 통한 문제 개선이 중요합니다.(그렇다고 에이블스쿨에서 배웠습니다.)

짧은 기간이지만 가지고 있었던 금융경력과, DX적 관점에서 어떻게 하면 문제점을 개선할 수 있을까 싶어서

자료출처 : https://www.all-con.co.kr/(올콘)

여기에 나갔습니다.

생애 첫 공모전이라 정말 떨렸지만, 에이블스쿨에서 만난 팀원들과 함께라서 잘 헤쳐나갈 수 있었던 것 같습니다.

A.I.C.E. 팀원분들 감사합니다!

 

● 주제선정

에이블스쿨 커리큘럼을 듣다보니, 주제선정과 데이터 전처리가 절반 이상이라는것을 뼈져리게 느꼈고, 사실 걱정도 많이 했습니다.

하지만 정말정말정말 다행스럽게도, 구현해보고 싶었던 주제가 이미 있었고 팀원분들의 열렬한 지지가 있었기에 제가

제안한 주제로 공모전 준비에 돌입할 수 있었습니다. 그래서 저희가 생각한 주제는 바로

 

대안신용평가

입니다.

 

컴퓨터관련 학과 4명과 경제학과인 PCNC. 이렇게 5명이서 팀이다 보니 주제관련해 어깨가 무겁기도 했고, 누구보다 열심히 참여했습니다.

누가 명확하게 어떤 내용을 담당했다고 말하기는 어렵지만... 굳이 이야기하자면 데이터 분석과 수집, 아이디어 수립, 발표 를 담당했다고 할 수 있겠습니다!

 

 

대안신용평가란? 씬파일러란?

대안신용평가란 개인의 신용도를 평가할 때 금융정보가 아닌 비금융정보(대체정보)를 이용하는 방식 입니다.

신용정보는 보통 ASS(Application Scoting System)와 BSS(Behavior Scoring System)가 합쳐진 CSS(Credit Scoring System) 점수로 환산되는데, 모두 금융행동패턴을 기반으로 하기 때문에 씬파일러들은 상환의지가 높더라도 대출을

받을 수 없습니다.

그래서 행동패턴을 기반으로 새롭게 신용점수를 만들어보자! 해서 생긴게 대안신용평가 입니다.

그럼 씬파일러는 또 무엇인가 하면 Thin + File + er의 합성어로 얇은 파일. 즉 서류정보가 없어 파일이 얇은 사람(금융데이터가 없는 사람)을 의미합니다.

요새는 하찮고 귀여운게 끌려요

그렇기에, 대안신용평가는 주로 개인 행동패턴을 기반으로 만들어집니다.

저희팀은 그중에서도 개방성, 성실성, 외향성, 우호성, 신경성으로 구성된 '행동심리학 5요인'을 활용&패턴 추가해서

대안신용평가모델 A.C.E라는 모델을 구상하게 되었습니다.

 

 

사용한 데이터

금융 데이터 활용 아이디어 경진대회는 금융혁신빅데이터플랫폼, 전라북도, 국민연금공단이 함께 주관하는 만큼,

금융혁신빅데이터플랫폼(https://data.nps.or.kr/service/svc/main/main.do)의 자료 사용이 필수적입니다.

※금융혁신빅데이터플랫폼을 사용해본바로는 향후 발전가능성은 충분하지만 아직 많이 아쉽다는 느낌을 받았습니다※

여기에 행동심리학 5요인에서 따온 비정형데이터 + NICE기반 기존 금융데이터를 추가하고, 가명결합 및 머신러닝을 통한 모델을 구상했습니다. 그림으로 표현하자면 아래와 같습니다.

팀 A.I.C.E. PPT 발췌

 

● 발표는 어땠는지?

총 10팀이 올라간 본선에 에이블스쿨 관련 팀이 3팀이나 있었습니다! 더 잘해야된다는 긴장 반, 동료가 있다는 생각에 든든함 반으로 발표회를 진행한 것 같습니다.

또, 금융혁신빅데이터센터 시설이 워낙 좋았고 담당자님께서 챙겨주셨던 간식 덕분에 긴장을 풀 수 있었습니다.

앞줄 전라9반, 뒷줄 수도권 에이블러님들 입니다!

 

팀당 10분의 발표시간이 주어지고, 모든 팀의 발표가 끝난 뒤에는 심사위원분들의 전체 질의응답으로 진행됩니다. 의아했던 점은 다른 팀의 발표를 들을 수 없었다는점 정도가 있겠습니다.(궁금했지만 참았읍니다...)

 

시계를 의식하지 말아보아요

 

● 그래서 결과는?

장려상을 수상했습니다.

대안신용평가가 기본적으로 가지고 있는 문제점을 명확히 풀어내지 못한 한계점 때문에 점수가 많이 낮아진듯 했지만

'그래도 수상한게 어디야!' 라는 생각입니다.

심사위원분들께서 정말 날카로운 지적들을 해주셨습니다.

기억에 남는 심사위원분께서는 KCB 부부장님과 에이블스쿨 자문을 진행하셨다는 심사위원님이 계시는데, 혹시나 

해당 공모전에 출마하실 예정이라면, 발표를 준비하며 가지게 되는 의문점을 완벽하게 해소하고 단상에 올라서시기를 추천드립니다.

 

교훈도 얻었습니다.

DX솔루션 part2에서 진행했던 as-is, to-be가 얼마나 중요한 전략인지 알 수 있었던 시간이었거든요.

(물론 공모전 직전의 수업내용이어서 공모전에 반영은 어려웠습니다...ㅠ)

'고객'의 입장과 '고객의 고객'의 입장. 여기에 더불어 이상과 현 상황의 GAP을 타파하기 위한 솔루션 제시가

DX컨설턴트로서 얼마나 중요한지 알게 되었던 뜻깊은 시간이었습니다!

 

마지막으로, 우수상을 수상하신 수도권 팀 축하드리고 안타깝게 수상하지 못한 전라 에이블러분들도 정말 고생 많으셨습니다.

특히 고집센 PCNC와 함께 팀 해주셨던 팀 A.I.C.E.분들 다시한번 감사합니다!

 

+ Recent posts