Note 334 시간과 부호화
데이터를 저장할 때 날짜나 시간을 표현해야 하는 경우가 있다. 하지만, 시간을 표현하는 방법과 기준이 다 제각각이면 데이터를 읽고, 처리하는데 번거로움이 발생한다. 예를 들어, 시간별로 주가 정보를 표현하는 데이터가 있다고 할 때, 날짜와 시간을 나타내는 데이터가 매우 중요할텐데...
데이터를 저장할 때 날짜나 시간을 표현해야 하는 경우가 있다. 하지만, 시간을 표현하는 방법과 기준이 다 제각각이면 데이터를 읽고, 처리하는데 번거로움이 발생한다. 예를 들어, 시간별로 주가 정보를 표현하는 데이터가 있다고 할 때, 날짜와 시간을 나타내는 데이터가 매우 중요할텐데...
내가 만든 어플리케이션을 나만 사용하려면 local 서버에 결과를 올려두어도 상관없다. 이것을 다른 사람도 사용하게 하려면 이 어플리케이션을 ‘배포’해주어야 한다. 나의 어플리케이션을 로컬 서버에 올리면 내 컴퓨터로만 사용할 수 있기 때문에 보통 AWS, Oracle과 같은 클라...
데이터 엔지니어의 관점에서 중요한 것 중 하나는 데이터 분석가가 원하는 데이터를 쉽고 빠르게 가져갈 수 있게 하는 것이다. DB에 적재되어 있는 데이터를 데이터 분석가가 직접 코딩으로 읽어올 수도 있겠지만, 만약 데이터를 읽어오고 다운로드를 받거나, 데이터를 조회하는 프로세스가 하...
도커(Docker, 개발환경 중 하나)는 애플리케이션 실행 환경을 코드로 작성할 수 있고, OS를 격리화하여 관리하는 기술이다. 리눅스에서 돌아가는 프로그램을 사용자의 PC에서도 쉽고(docker file을 통해) 빠르게(Container를 통해) 동작할 수 있도록 툴을 제공한다.
SQL은 관계형 데이터베이스로 관계와 구조가 정해져 있기 때문에 스키마를 짜고, 데이터를 입력하는 데에 많은 시간이 소요된다. 하지만, 이미 짜여진 스키마를 토대로 데이터를 읽어오기만 하면 되어서 데이터를 읽어온 후에는 데이터가 어느 정도 정제가 되어 있을 것이다. 데이터베이스는 ...
웹 스크레이핑을 하면 html 형식으로 데이터를 받고, 너무 많은 태그와 상속 관계 등이 존재해서 이 데이터를 보기 좋게 정제하는데 오랜 시간이 걸린다. Web API를 사용하면 보통 Json 형식으로 데이터를 리턴 받기 때문에 파이썬의 dictionary 형태로 데이터를 다룰 수...
데이터 분석을 할 때 항상 데이터가 주어지는 것은 아니다. 파일이나 DB가 주어지지 않더라도 연구자가 직접 데이터를 수집해야 할 상황이 생길 수 있다. 웹 스크레이핑을 사용하면 데이터가 주어져있지 않더라도, 웹 상에 있는 데이터를 심지어는 과거의 데이터까지 찾아서 데이터를 수집할 ...
파이썬은 기본적으로 객체 지향 프로그래밍 언어이다. 객체 지향 프로그래밍을 공부하기 위해서는 Class, Instance, Inheritance 등 다양한 개념을 숙지해야 한다. 또한, 디버깅 방법과 데코레이터에 대해서도 정리해보자.
SQL을 꼭 MySQL, SQLite과 같은 DB 프로그램에서만 실행시킬 필요는 없다. 파이썬에서도 SQL을 작성하여 원하는 데이터를 조작할 수 있는데 이때 사용하는 것이 DB API이다. 또한, 자체적으로 DB를 관리하지 않고 AWS나 Google Cloud Database를 활...
지난시간에 이어서 데이터베이스에 대해 더 심화된 쿼리와 개념들을 학습했다.
실무에서는 csv 파일, 엑셀 파일을 쓰는게 아니라 기업 내의 데이터 베이스에서 데이터를 불러와서 사용한다. 이 데이터 베이스에 대한 개념들과 기본 쿼리문에 대해 알아보자.
데이터 직군에는 데이터 과학자, 데이터 분석가, 데이터 엔지니어 등 여러가지가 있다. 지금까지 데이터 분석가에 관련된 공부를 했다면, 이번에는 데이터 엔지니어와 관련된 백엔드 개념, 실전에서 사용되는 기술들을 공부해보자.
지난 포스팅까지 해서 대전광역시 교통사고 위험 예상지역 100개지역을 도출했고, 마지막으로 이 지역들에게 어떠한 조치가 취해지면 좋을지 대안책을 제시해보자.
지리적 가중 포아송 회귀를 최종 모델로 선택했고, 2개의 사고유형, 6개의 연령대별을 합쳐서 총 12개의 그룹에 대해 각각 다른 모델을 만들었다. 또한, 이 12개의 모델의 회귀계수를 ‘coef_사고유형_연령대’ 형식의 csv로 저장했다. 이 회귀계수 데이터에는 회귀계수 뿐만 아니...
지리적 데이터에 적합하면서 이산형 자료를 잘 예측할 수 있는 지리적 가중 포아송 회귀 모델을 사용하여 사고유형별, 연령대별 사고건수를 예측해보자.
비교적 간단한 모델에 속하는 OLS, 포아송 회귀보다 지리적 데이터에 더 적합한 지리적 가중 회귀(GWR) 모델을 사용해보자.
모든 전처리가 끝나고 모델링 파트까지 왔다. 모델링은 Part1,2로 나누어져있고, 모델링은 모두 R을 사용했다. Part.1에서는 가벼운 모델인 OLS와 단위 시간당 특정 사건의 갯수를 예측하는 포아송 회귀 모델을 사용했다.
전처리 Part.7 에서는 다시 한번 국지적 모란지수를 활용해서 연령과 사고유형별로 의미가 떨어지는 사고격자를 제거하고, 사망자수, 중상자 수에 따라 가중치를 도출했다. 이 가중치가 높을 수록 교통사고에 더 치명적인 격자가 될 것이라고 가정했다.
R을 사용하여 교통사고내역 데이터의 사고유형, 연령대 변수를 현재까지 구축한 데이터와 병합한다. 그 후, python으로 사망자, 중상자 ,경상자 수를 gid 격자별로 count하고 병합한다.
전처리 Part.5 에서는 R로 작업했던 날씨 데이터를 불러와서 기존 데이터와 병합한 뒤, 교통 시설물 데이터를 추가했다.
전처리 Part.4에서는 R을 사용해 연도별 날씨 데이터를 불러와서 전처리를 진행했다.
전처리 Part.3에서는 격자별로 신호등이나 CCTV와 같은 교통시설물들에 대한 정보와 일별, 시간별 혼잡도 데이터를 추가했다.
전처리 두번째 파트는 ‘국지적 모란지수’라는 개념을 사용하기 위해 R로 작업했다. 자세한 내용은 뒤에서 다뤄보도록 하자.
“대전광역시 교통사고 핫스팟 지역 100개 도출”을 주제로 한 LH 주관 공모전에 참가했다. 전국단위의 공모전이라 많은 참가팀들이 있었지만, 약 한달이라는 시간동안 열심히 준비한 결과 장려상을 수상했다.
GAN은 딥페이크의 기반이 되는 신경망 모델이다. 딥페이크가 악용되어서 발생하는 사회적인 문제들이 아주 많지만, 딥페이크는 원래 인공지능이 질병을 잘 학습하고 정확히 진단할 수 있도록 의료용 이미지를 만드는 등의 좋은 목적을 가지고 등장했다. 사생활 문제로 실제 환자의 질병 데이터...
AutoEncoder는 입력된 데이터를 저차원의 벡터로 압축시키고 다시 원본 크기의 데이터로 복원하는 신경망으로, 유용하게 쓰일 수 있다. 이 AutoEncoder를 활용하면 차원을 축소할 수 있고, 데이터의 어느 정도 형태는 유지하면서 데이터를 압축시킬 수 있기 때문에 저장면에서...
MLP나 CNN을 이용하면 이미지에 맞는 class를 예측하는 이미지 분류를 할 수 있다. 하지만, MLP는 공간정보를 보존하지 못하고, CNN 또한 완전 연결 신경망 층에서는 기존에 추출했던 공간정보를 보존하지 못하기 때문에 더 세부적인 이미지 분류가 어렵다. 이번 포스팅에서는 ...
이미지 데이터는 공간적인 특성을 가지고 있고 (높이, 너비, 깊이) 라는 3차원 텐서로 표현되는데 여기서 깊이란 이미지가 흑백인지 컬러인지를 구분할 수 있게 한다. 예를 들어 (28,28,1)의 이미지는 가로 세로 벡터의 크기가 28인 이미지이고 깊이(채널)은 1이기 때문에 흑백 ...
RNN에서는 단어가 순서대로 들어오기 때문에 시퀸스가 길면 연산 시간이 길어진다는 단점이 있다. 단어를 time-step별로 처리해서 병렬처리를 하지 못하기 때문인데 트랜스포머(Transformer)는 모든 토큰을 동시에 입력받아 병렬 연산을 함으로써 이 문제를 해결한다. 트랜스포...
순환 신경망(Recurrent Neural Network)를 사용하면 시계열과 같은 Sequential한 데이터를 잘 예측할 수 있다. 이번 포스팅에서는 언어모델과 순환신경망에 대해 정리해보자.
NLP에서 단어를 벡터화 하기 위해서는 등장 횟수 기반과 분산 기반 표현 이 2가지 방법이 있다. 등장 횟수 기반은 단어의 빈도수만 고려하고 다른 단어와의 상관관계는 고려하지 않는다는 단점이 존재한다. 또한, 단어의 갯수가 많아질수록 계산해야 하는 차원이 많아져서 저장 공간이나 계...
자연어는 사람들이 일상적으로 쓰는 언어를 의미하고, 인공적으로 만들어진 언어(프로그래밍 언어 등)와 구분하여 부른다. 이 자연어를 컴퓨터로 처리하는 기술을 자연어 처리(Natural Language Processing, NLP)라고 하는데 이번 스프린트에서는 이 NLP에 대해 배웠...
머신러닝에서 일반화 능력을 향상 시키기 위해 교차검증을 사용했고, 모델을 최적화 시키기 위해 하이퍼파라미터 튜닝을 진행했다. 머신러닝에서는 하이퍼파라미터가 많아야 20가지 정도가 되었지만, 신경망에서는 층이 깊어질수록 튜닝해야 하는 하이퍼파라미터가 정말 많아진다. 이를 손으로 직접...
딥러닝도 머신러닝의 일부라고 할 수 있기 때문에 성능을 더 높이거나 과적합을 해소하기 위한 방법들이 머신러닝과 유사하다. 이번 포스팅에서는 학습률, 가중치 초기화, 정규화 등의 방법을 사용하여 신경망의 성능을 어떻게 높이고, 과적합을 해소할 수 있는지 다뤄보자.
신경망에서의 학습이 어떻게 이루어지는지 알아보자. 또한, 손실을 최소화하기 위해서 가중치와 편향을 어떻게 업데이트 시키는지 정리해보자.
이번 섹션에서는 해석하긴 어렵지만 머신러닝보다 더 좋은 성능을 낼 수 있는 딥러닝에 대해 배울 것이다. 특히 이번 포스팅에서는 딥러닝을 배우기 위한 기본개념인 퍼센트론, 인공신경망, 활성화 함수 등에 대해 알아보자.
선형 회귀에서는 회귀 계수를 통해 변수가 타겟에 영향을 미치는 정도를 파악할 수 있었다. 하지만, 좋은 성능을 내기 위해 단순한 선형 회귀가 아닌 복잡한 모델을 사용하면 모델을 해석하기가 어려워진다. 즉, 어떤 변수가 타겟에 얼만큼 영향을 미치는지 설명하기가 어려워진다는 뜻이다. ...
RandomForest 모델은 기본 모델인 Decision Tree 모델을 각각 독립적으로 학습하여 모든 기본모델의 학습 결과를 반영해서 최종 타겟값을 예측하는 Bagging 모델이다. Bagging 외에도 다양한 앙상블 기법 중 Boosting과 Stacking이 있는데 이번 ...
지난 이틀동안 ML에서 일어날 수 있는 문제들과, Data Wrangling에 대해 배웠다. 또한, 불균형한 데이터를 처리하는 방법에 대해서도 알 수 있었다.
데이터셋이 충분히 크다면 hold-out 교차 검증을 할 수 있다. 하지만, hold-out 교차 검증을 하면 검증 데이터에서 한 번씩 밖에 학습된 모델의 성능을 측정할 수 있기 때문에 이 일반화 능력을 100퍼센트 신뢰하기 어렵다. 검증 데이터를 여러번 쓸 수 있다면 일반화 능력...
분류 모델의 성능을 평가하는 데에는 accuracy외에도 여러가지 지표가 있다. 이번 포스팅에서는 다양한 지표들과 데이터에 따라 더 중요한 지표에 대해 알아보자.
Decision Tree는 비단조 데이터, 특성상호작용과 관계 없이 좋은 성능을 낸다는 장점이 있다. 한 개의 트리만을 사용하기 때문에 한 노드에서 생긴 에러가 하부 노드에 계속 영향을 줄 수 있고, Tree를 너무 깊게 학습하여 과적합이 일어날 수 있다. 이를 해소하기 위해 최대...
데이터들의 분포가 비선형일 때도, 분류와 회귀 문제에서 모두 사용할 수 있는 모델 중 하나인 Decision Trees에 대해 배웠다. 또한, 결측치를 처리하는 다양한 imputer에 대해서도 알 수 있었다.
분류모델 중 하나인 Logistic Regression에 대해 배웠다. 또한, 검증 데이터의 중요성을 알 수 있었고, 다양한 Scaler에 대해 공부했다.
다중 선형회귀에서 과적합이 발생하는 경우 회귀계수에 패널티를 부과해서 과적합을 해소하는 Ridge Regression에 대해 배웠다. 또한, 가장 적절한 변수의 갯수를 선택하는 방법도 알게 되었다.
다중 선형 회귀, 편향, 분산, 다중 공선성, 여러가지 회귀지표 등에 대해 학습했다.
이번 포스팅에서는 단순 선형 회귀에 대해 배웠다. 기존에 알고 있던 개념이지만, 나의 언어로 다시 적어보자.
비지도 학습의 예시 중 하나인 Clustering에 대해 배웠다. 그리고 많은 Clustering 방식이 있지만, 이번 Posting에서는 K-means와 Hierarchical clustering 알고리즘에 대해 정리해보자.
데이터의 차원이 크다고해서(변수가 많은 것) 무조건 분석에 효과적인 것은 아니다. 오히려 계산량을 증가시키고, 분석에 방해가 되는 변수들이 존재할 수도 있다는 것이다. 데이터의 차원이 크면 발생하는 문제점들이 무엇이 있을까?
선형대수 두번째 파트로 공분산, 상관계수, 직교, 선형투영, Span, Basis, Rank 등에 대해 배웠다.
선형대수의 기본인 벡터와 행렬에 대해 공부했다. 선형대수를 구성하는 기본 단위는 스칼라와 벡터이다. 또한, 행렬은 여러 벡터로 이루어져있다.
Note123 에서는 ANOVA, 신뢰 구간, 큰 수의 법칙, 중심 극한 정리 등의 개념을 배웠다.
확률의 종류에는 여러가지가 있다. 그 중 조건부 확률은 기본적인(단순한) 확률에 조건이 붙은 확률을 말한다.
기본적인 통계치, 다양한 Sampling 방법, T-test에 대해 배웠다. 통계를 처음 배우다보니 헷갈리는 부분이 있었지만, 스스로 예시를 들어보며 이해하는 방법이 공부하는데에 도움이 많이 될 것 같다.
T-test와 Anova test는 모집단이 정규분포를 따를때 내가 세운 가설을 검증하는 방법이다. 그렇다면 모집단이 정규 분포를 따르지 않는다면 어떻게 가설을 검증해야 할까?
AI 캠프를 시작한지 일주일이 지났다. R에서 배웠던 전처리 코드들을 파이썬 pandas 패키지를 사용해서 써보았다. 크게 어렵지 않아서, 잘 안 외워지거나 새로 알게된 내용들만 정리해보자. 코드보고 싶으면 github가서 직접 보기. note에 없으면 dicussion 링크가서 ...
RetinaNet은 one stage detector의 대표주자인 YOLO, SSD보다 높은 성능을 기록하면서 Faster R-CNN보다 빠른 수행시간을 기록한 모델이다. 특히, 작은 object에 대한 detection 능력도 뛰어난데 이번 포스팅에서는 이 RetinaNet에 대...
R-CNN이 다른 모델들에 비해 높은 mAP를 기록했고 이후 Fast-RCNN, Faster R-CNN, Mask R-CNN 등 여러 모델들이 R-CNN을 develop하여 object detection 분야에서 더 많은 발전을 이루어냈다. 이번 포스팅에서는 R-CNN 이후의 모델...
Computer vision 분야의 발달로 네트워크의 층을 더해 정확도를 높이면서 연산량을 줄여 속도는 높이는 방법들이 고안되었다. 이 과정속에서 네트워크의 깊이와 높이, 이미지의 크기, 필터의 채널 수 등 다양한 파라미터들이 실험적으로 사용되었는데 EfficientNet과 Eff...
Abstract 본 연구는 single deep neural network로 object detection을 수행한다. SSD라는 접근 방식은 bounding box를 피처맵의 위치별로 종횡비와 배율이 다른 default box 집합으로 이산화하는 것이다. 네트워크는 default...
Abstract 객체 탐지의 이전 연구들에서는 분류기에서도 detection을 수행할 수 있도록 했다. 본 연구에서는 하나의 단일 신경망을 사용해서 여러 bounding box와 class probabilities를 예측하는 객체 탐지를 regression 문제로 취급했다. 본 연...
Abstract 지난 몇년동안(2013) PASCAL VOC dataset에 관해 객체 탐지의 성능 향상이 더디다. 대화마다 best model은 일반적으로 여러개의 저수준 피처와 고수준의 context를 결합한 복잡한 앙상블 구조이다. 본 연구에서는 단순한 탐지 알고리즘으로 V...
전처리, 모델링의 과정을 모두 거쳐서 최종적으로 정확도 73%, AUC가 0.8723인 모델을 만들었다. 배달 데이터 프로젝트의 마지막 파트에서는 분석 결과와 한계에 대해서 정리해보자.
지난 포스팅까지 모델링을 위한 모든 전처리 과정을 맞췄다. 이번 포스팅에서는 여러가지 모델을 사용한 모델링의 과정과 성능에 대해 정리해보자.
데이터의 변수를 늘려서 모델의 성능을 올리기 위해 여러 변수들을 추가해보자. 날씨, 요일, 공휴일, 축구, 구별 연령대별 인구수, 미세먼지 등의 변수를 추가했다.
KT 빅데이터 플랫폼에서 제공하는 배달 데이터를 활용하여 서울 특별시의 시간대별, 구별로 주문의 정도(많음, 보통, 적음)를 예측하는 모델을 개발했다. 이번 포스팅에서는 어떤 데이터를 추가로 활용하여 모델을 만들고, 성능을 높였는지 코드를 정리해보자.
지난 포스팅까지 데이터 수집, 전처리, 모델링의 과정을 모두 마쳤다. 이번 포스팅에서는 전처리가 완료된 데이터를 기반으로 사용자가 특정 선수를 입력하면 그 선수와 비슷한 유형의 선수나 관련 있는 선수를 추천해주는 추천시스템의 개발 과정을 정리해보자. 또한, 프로젝트의 분석 결과와 ...
모델링을 진행하기전에 각 댓글을 형태소 기반으로 토큰화하고 불필요한 특수문자나 불용어들을 제거할 것이다. 모델이 단어를 이해할 수 있게끔 각 단어를 정수로 맵핑해주는 정수 인코딩과 모든 댓글의 길이를 동등하게 맞춰주는 패딩의 과정을 거쳐 모델링을 진행했다. 초기 모델링 후에는 성능...
피파 인벤 홈페이지에서 수집한 댓글 데이터에는 이미 평점 데이터가 주어져서 이 평점 데이터를 기반으로 해당 댓글이 긍정인지 부정인지를 판단할 수 있다. 하지만, 사용자마다 매기는 평점은 주관적이기 때문에 같은 4점의 평점이라도 이 4점이 높은 편인지, 낮은 편인지를 파악하기가 힘들...
댓글과 같은 텍스트 데이터를 처리하는 즉, 자연어를 처리하는 NLP는 실생활에서 매우 유용하게 사용될 수 있다. 이번 프로젝트에서는 평소에 즐겨하던 게임이었던 피파온라인4의 선수 댓글을 감성 분석하고 사용자가 선택한 선수와 비슷한 선수를 추천하는 추천 시스템을 개발했다.
Abstract 신경망의 깊이가 깊어질수록 학습은 더 어려워진다. 본 논문에서는 레이어를 잔차함수로 변환하는 residual learning framework를 적용하여 이전의 모델들보다 더 깊은 신경망일지라도 학습이 잘 되게 했다. 깊이가 최대 152로 VGG모델보다 8배 깊은 ...
Abstract 본 논문은 Deep Convolutional Neural Networks의 아키텍처를 인셉션(Inception)이라는 이름으로 제안한다. ILSVRC14에서 분류와 탐지 부문 최고 수준을 달성했다. GoogLeNet이라 불리는 해당 아키텍처는 22개의 deep ne...
Abstract 대규모 이미지 인식에서 Convolutional Network의 깊이와 정확도에 대해 연구했다. 상대적으로 작은 3x3 합성곱 필터를 사용하여 층을 깊게 만들었고, 16 - 19개의 층을 쌓았을 때의 모델이 기존에 연구되었던 모델들의 성능보다 더 좋은 성능을 기록...
Abstract ImageNet LSVRC-2010 대회에서 120만개의 고해상도 이미지, 1000개의 라벨을 분류하는 CNN 모델을 만들었다. 그 결과 테스트 데이터에서 기존의 SOTA보다 뛰어난 top1, top5 에러율을 37.5%, 17.0%로 기록했다. 훈련 속도를 높이기...
Abstract 본 논문에서는 object instance segmentation task에 대한 simple, flexible, general한 framework에 대해 소개한다. 본 연구의 접근방식은 효과적으로 객체를 탐지하는 동시에 각각의 인스턴스에 대해 높은 수준의 segm...
Atrous Convolution이란? DeepLabv3+ 논문을 리뷰하기 앞서 DeepLab 모델들에서 사용된 핵심 기법인 Atrous Convolution에 대해 알아보자.
Abstract 좋은 딥러닝 네트워크를 구축하기 위해서는 수많은 데이터가 필요하다. 본 논문에서는 데이터 증강에 의존하여 주어진 데이터를 효율적으로 사용한 네트워크와 학습 방법에 대해 소개한다. 네트워크는 특징을 추출하는 contracting(수축) path와 localizati...