은행/카드사 - 거래 내역, 보유 재산, 신용 정보 등의 데이터를 보유하고 있습니다. 은행 및 카드사는 데이터를 반드시 축적해야 계좌 및 금액 관리가 가능합니다. 통신사 - 유동인구 데이터, 전화량, 데이터 사용량 등 무궁무진한 데이터를 보유하고 있다. 카드사와 통신사는 일반적으로 제휴를 많이 맺고 있습니다. 여론조사 기관 - 정교한 샘플링으로 데이터를 수집합니다. 제조업 - 공정데이터를 가지고 있습니다. 제약 - 신약 후보 물질 탐구, 신약의 효과 검증을 위해 데이터 분석을 활용합니다. 공공기관 - 교통정보, 기상정보, 건강보험정보, 소득정보 등의 데이터를 보유하고 있습니다.
데이터 분석은 데이터를 요리해서 우리에게 필요한 해결방안을 도출해내는 것입니다. 데이터는 객관적이지만 사람의 판단은 주관적이기 때문에, 같은 데이터로 분석을 해도 결과는 매우 달라질 수 있습니다.
2. 차이에 대한 개념 이해하기
1) 데이터 구성 : 데이터는 변수와 관측치로 구성되어 있습니다.
1. 범주형 변수(Categorical Variable )
: * 관측치간 차이를 나타내는 방법
1. 절대적인 차이(95점) 2. 상대적인 차이(30명 중 3등)
* 범주형 변수의 요약 방법 1) 빈도표 : 수준간 절대적인 차이 2) 상대빈도 : 수준간 상대적인 차이 3) 막대 그래프 ( 절대적인 차이 ) 4) 원 그래프 ( 상대적인 차이 ) 2) heat map : 숫자 대신 색의 진하기로 크기를 표현
2. 수치형 변수(Numeric Variable)
* 수치형 변수의 요약 방법
1) Box Plot : 사분위수를 활용하여 나타낸 그래프 2) 도수분포표(contingency table) 3) 히스토그램 : 구간별 관측치를 나타낸 그래프 4) 기술통계 : - 평균/중앙값 - 분산/표준편차 5) 산점도 : 두 수치형 변수를 가로축, 세로축으로 활용하여 그린 그래프 각 변수별로 평균선을 그리면 양/음의 상관관계를 쉽게 나타낼 수 있다.
* 수치형 변수의 상대적인 값으로의 변환
1) 백분율 2) 최소-최대 정규화 3) 표준화 (Z값) : 평균으로부터 떨어진 정도를 표준편차의 단위로 표현
* 공분산 : 두 변수의 상관관계를 나타내는 방법 중 하나
* 공분산의 문제점 : 공분산은 scale이 크고, unit이 복잡합니다. 이러한 문제점을 해결하기 위하여 상관계수가 등장합니다. → 상관계수는 1과 -1 사이의 값만 가집니다.
4. 범주형 변수와 수치형 변수의 관계
1) 조건부 평균 : 범주형 변수의 수준별로 관측치를 나누고, 그룹마다 평균을 비교한다. 2) 수치형 변수의 구간화 : 수치형 변수를 구간화함으로써 범주형 변수 2개 사이의 관계를 알아본다.
5. 선형회귀
: 주어진 두 수치형 변수 사이의 관계를 일차함수로 나타내는 방법
* 관심변수(반응변수, 종속변수) * 설명변수(독립변수)
추세선 : 독립변수와 종속변수의 관계를 직선으로 나타낸 것. 두 수치형 변수의 관계를 파악할 수 있다.
선형회귀 : 주어진 데이터를 활용하여 두 변수의 관계를 가장 잘 나타내는 B0, B1 변수를 구하는 방법.
* 선형회귀에 사용되는 방법 :
최소제곱법(least squares approximation)
회귀직선의 기울기는 두 변수의 상관계수에 비례한다.
예측 값(B0)을 살펴보면 예측된 Y값이 평균 중심으로 당겨지는 것을 확인할 수 있다.
6. 예측
1) 범주형 변수를 활용한 예측 전략 범주형 범주인 설명변수 - 구간별 평균을 통해 예측 가능
2) 수치형 변수를 활용한 예측 전략 수치형 변수의 구간화 : 산점도와 상관계수를 활용한다
1. 남은 시간 배열 만들기 : 저같은 경우에는 매우 어렵게 만들었습니다. 남은 양을 speed로 나눈 뒤 반올림을 했죠.
여기서 잘하시는 분들의 풀이를 보니 힌트를 얻은 부분은! -10 // 3은 -4라는 점입니다. 오랜만에 생각났습니다... 제 기억으로는 나머지는 무조건 양수가 되어야 하므로 -10 = 3 * -4(몫) + 2(나머지) 가 됐던 것 같습니다. 이를 활용하시면 더욱 쉽게 남은 시간 배열을 만들 수 있습니다.
2. 남은 시간 비교하기 : 처음 제가 문제를 풀지 못했던 이유는 배열의 각 요소를 다음 요소와(만) 비교하는 것을 계속 반복했기 때문이었습니다... 예를 들어, [50일, 25일, 3일, 24일] 이렇게 남은 시간을 구한 경우에는 다음과 같은 과정을 겪는다고 생각했습니다.
1) 50일 > 25일이므로 첫번째와 두번째 배포는 같이 이루어진다.
2) 25일 > 3일이므로 두번째와 세번째 배포는 같이 이루어진다.
3) 3일 > 24일이므로 앞의 3가지 배포는 이루어진다.
4) 24일 걸리는 배포가 혼자 마지막으로 이루어진다.
→ 답은 [3, 1] ! 이라고 생각했던 제가 바보였죠..
1) 50일 > 25일이므로 첫번째와 두번째 배포는 같이 이루어진다.
2) 50일 > 3일이므로 두번째와 세번째 배포는 같이 이루어진다.
3) 50일 > 24일 일이므로 4가지 배포는 모두 한번에 이루어진다.
→답은 [4] !입니다.
즉, 미루어진 프로그램 배포 중에 가장 긴 시간이 걸리는 것과 비교해야 하는 것을 망각하고 있었습니다.. 혹시나 막히시는 분이 계시다면 이 점을 생각하시고! 답은 보지 마시고 한 번 다시 풀어보세요. 이상 끝 -!
이번주는 '데이터 분석이 무엇인가', '다양한 산업에서 데이터 분석은 어떻게 활용되는가' 에 관한 내용을 공부했습니다. 분석에 앞서 배우는 개요 느낌이라 어려운 점은 없었고, 깔끔하게 애니메이션으로 동영상이 구성되어 있어 보는데 좋았습니다.
1. 데이터 분석 : 데이터 분석에 관련된 직무는 Data Engineer, Data Analyst, Data Scientist로 나눌 수 있습니다. 작은 회사는 데이터 관련 인원이 많지 않기 때문에 세분화되지 않을 수 있지만, 큰 회사일수록 세분화되어 직무를 뽑습니다. 관련 내용은 유투브에 찾아보시면 더 자세히 알아볼 수 있습니다.
데이터 분석 과정은 아래와 같이 구분해볼 수 있습니다.
1. 데이터 분석가 :
분석 주제 발굴, 가설 수립, 샘플링 및 정제, 결과 해석의 업무를 수행하고 필요한 역량은 아래와 같습니다.
* 필요 역량 1) 통계 지식 2) Mathematics 3) R, 파이썬, 엑셀 등의 분석 툴 활용 4) Business Knowledge 5) 커뮤니케이션 역량(리포트, 글쓰기, 데이터 시각화)
2. 데이터 엔지니어
프로세스 설계, 시스템 개발, 운영 적용 및 모니터링, 분석 데이터 수집, 샘플링 및 데이터 정제 작업을 수행하고, 필요 역량은 아래와 같습니다.
* 필요 역량 : 1) 컴퓨터 엔지니어링 2) 개발 능력 3) 데이터 저장 기술 4) 웹 등 시스템화 관련 기술 5) 데이터 수집 기술(빅데이터) 6) 분산 파일 시스템, 분산 컴퓨팅 등의 빅데이터 기술 요소 이해 7) 클라우드 기술
3. 데이터 사이언티스트 : 데이터 사이언티스트는 데이터 분석 능력뿐만 아니라 빅데이터 활용능력, 머신러닝을 활용한 분석 능력도 필요로 합니다.
* 필요 역량 : 1) Business Knowledge 2) 통계학 및 기계학습 3) 호기심 4) R, Python 등의 Programming skills 5) Big Data 기술 이해 6) 시각화
4. 현업에서의 데이터 분석 사례 : 공공데이터 공공데이터는 환경, 수출 등 무수히 많은 데이터가 축적되고 있고, data.go.kr과 같은 사이트에서 찾아볼 수 있습니다.
5. 현업에서의 데이터 분석 사례 : 제조업 제조업 데이터는 경우 변수 개수가 상당히 많습니다. 제조 공정별로 변수가 여러가지가 생성되기 때문에 중요 변수들을 잘 추출하여 분석하는 능력이 중요합니다.
1) 다중공선성 : 독립변수들간에 높은 선형관계가 존재하는 경우를 뜻하는 말로, 다중공선성이 높은 경우에는 변수를 적절히 제거할 필요가 있습니다. 2) 불균형 자료(예 : 양품 vs 불량 비율) : 대부분 제조업의 경우 불량 분석을 위해 빅데이터를 활용하는데, 양품의 비율이 불량의 비율보다 월등히 높습니다.(그렇지 않으면 이익이 나지 않겠죠?) 따라서 데이터의 불균형이 매우 심합니다.
5. 현업에서의 데이터 분석 사례 : 통신/마케팅
통신, 마케팅 분야에서는 데이터를 활용하여 아래와 같은 작업을 수행합니다.
1) 상품 추천 2) 영화 추천 3) 상권분석 및 매장분석
사용 알고리즘 : 연관규칙 알고리즘 : 특정 상품을 살때 어떤 상품을 같이 사는지 분석 협업필터링 : 비슷한 사람들을 분류하여 비슷한 마케팅 진행
6. 현업에서의 데이터 분석 사례 : 금융/보험
금융/보험 분야에서는 데이터를 활용하여 아래와 같은 작업을 수행합니다.
1) 고객이동경로분석 2) 신용평가 3) Fraud Detection System 4) 운전 습관을 통한 보험료율 책정/할인 5) 건강 관리를 통한 보험 할인 6) 보험 사기 방지
제약 사항 : 고객정보 공유 규제(유출 시 막대한 피해)
7. 현업에서의 데이터 분석 사례 : 헬스케어
금융/보험 분야에서는 데이터를 활용하여 아래와 같은 작업을 수행합니다.
1) 질병 감시/예측 서비스 2) 의료 빅데이터 및 AI : DNA, 진단정보, 의료차트 등을 활용한 예측 서비스 및 Computer Vision을 활용한 판정 빅데이터와 AI를 활용한 신약 후보물질 제안
현대자동차의 코나를 빌렸고(평소에 타보고 싶었음), 3시간 반 주행에 총 요금은 38000원정도 나왔습니다.(24km 주행)
코나는 외형이 마음에 들어서 빌렸으나, 실제 시승감을 평가해보면 소형 SUV라 그런지 SUV만의 높은 승차감은 없었고,
생각보다 실내공간이 작았습니다. 차 사기 전에 시승 및 소카로 틈틈히 이용을 많이 해봐야겠다는 생각이 들었네요.
코나를 타고 방문한 곳은 별내의 카페거리!
'이 근처에 살면 좋겠다' 라는 생각이 들 정도로 사람도 많고 생각보다 깔끔하게 되어있어서 좋았습니다. 가족단위 방문객이 많았고 카페 뿐만 아니라 음식점도 꽤 많아서 점심이나 저녁도 함께할 수 있을 것 같았습니다.
저는 마담파이라는 카페를 방문했는데요, 가격은 일반 카페보다 조금 비싼 정도이고 맛도 괜찮았습니다. 레몬 머랭 파이, 더치 커피, 레몬 티를 주문했는데 신 것을 많이 좋아하시지 않는다면 레몬 메뉴는 중복해서 드시지 않는 것을 추천드립니다..ㅎㅎㅎ 커피는 5점 만점에 4점, 레몬 티와 레몬 머랭 파이는 3점 드립니다. 맛인 나쁘지 않았고 날씨 및 뷰도 좋아서 너무 좋았어요.
카페에서의 휴식을 마치고 방문한 음식점은 1키로 남짓 떨어진 [스테이크 9]입니다. 큰 음식점 몇개가 붙어있어서 근처에 음식점을 찾으시는 분은 우선 여기로 방문해서 선택하셔도 나쁘지 않을 것 같습니다. 예약은 하지 않았고 전화해보니 대기 인원이 없다고 해서 방문했습니다. 4팀이 대기 중이었는데 15분 남짓 기다려서 금방 앉을 수 있었습니다.
식전 빵과 스프를 주는데 스프가 조금 식어있어서 아쉬웠지만 맛은 괜찮았어요. 앉아서 메뉴를 보니 네이버 상으로 보이는 메뉴보다 더 다양하더라구요. 주문은 태블릿을 사용하여 하였고 뉴욕 스트립 나인(220g) 2개와 로제 파스타를 주문했어요. 스테이크는 별도 주문을 안하면 미디움으로 주는 것 같고 가격에 비해 굉장히 맛있었습니다. 스테이크가 맛있어서 그런지 파스타는 그냥 그랬던 것 같아요. 스테이크는 별 4개, 로제 파스타는 별 3개 주고 싶네요. 스테이크는 사실 가성비로 따지면 별 다섯개를 줘도 아깝지 않을 것 같아요.
남양주에 방문할 일이 많은데 이번 방문으로 남양주의 다양한 맛집을 기대하게 되는 하루였습니다. 스테이크 나인은 음식도 빨리 나오고 가성비도 좋아서 추천해요! 이상 끝 -!
지금까지 2,3,4주차를 통하여 데이터 분석에 사용되는 기초지식 [기초통계, 머신러닝]에 대해 알아봤습니다. 이제 이 지식들을 사용하여 데이터를 분석해봐야 하는데, 우리에겐 주어진 데이터가 없습니다. 도대체 이 데이터들은 어떻게 누가 만드는 것일까요? 데이터 분석가가 분석할 수 있도록, 혹은 내/외부의 필요에 의해 데이터를 수집하고 정제하는 데이터 엔지니어들이 있습니다. 이번 5주차는 데이터 엔지니어들의 업무인 데이터 엔지니어링에 대해 학습해볼 예정입니다.
1. 크롤링(Crawling) 다양한 정보들을 활용하기 쉽도록 수집하는 행위(혹은 Scraping)
(엄청 간단하게 한 문장으로 표현했지만 크롤링은 온라인 상에 존재하는 다양한 정보들을 원하는대로(능력이 된다면) 긁어올 수 있는 꽤나 유용한 기술입니다. 크롤링에 관한 서적이 많으니 궁금하신분은 책을 하나 사서 따라해보세요.)
2. ETL(Extract, Transformation, Loading) : 내/외부의 데이터를 추출하고, 이를 필요에 맞게 변환한 후 저장하는 일련의 절차입니다.
ETL은 데이터 웨어하우스라는 데이터 저장을 위한 데이터 구조를 만드는데매우 중요한 과정입니다. * ETL 오픈소스 도구 : Talend, Pentaho, KNIME, Apache NIFI, StreamSets....
* ELT(Extract, Loading, Transformation) : ELT에서 Loading과 Transformation의 순서를 바꾼 것으로 1. 데이터 크기가 너무 크거나 2. 변환 과정이 너무 오래걸리거나 3. 변환 과정이 추후 활용하는 단계에서 쓰인다.
3. 정형데이터 / 비정형데이터 / 반정형데이터
1) 정형 데이터(Structured Data) : 열과 행을 정리하여 일목요연하게 표로 만들 수 있는 데이터
2) 비정형데이터(Unstructured Data) : 형태를 정의할 수 없는 데이터 ex) 영상, 음성, 텍스트
3) 반정형 데이터(semi-structrued data) : 각 의미를 구분할 수는 있지만 행과 열 형태의 표로 쉽게 정리가 어려운 데이터 ex) JSON, XML, HTML
4. Data Warehouse vs Data Lake
1) 데이터 웨어하우스 : 사용자의 의사 결정에 도움을 주기 위하여, 여러 시스템의 데이터베이스에 축적된 데이터를 공통의 형식으로 변환해서 관리하는 데이터베이스
* 형성된 데이터 웨어하우스에서 각 주제별 데이터 마트를 만들 수 있습니다. 데이터의 수집부터 정제, 인사이트 도출까지의 과정을 아래와 같이 간단히 나타낼 수 있습니다.
ETL -> EDW(Enterprised Data Warehouse) -> Mart -> BI Analytics
[ 데이터 웨어하우스의 단점 ]
1) 각기 다른 시스템에서 많은 데이터를 가져와야 하기 때문에 ETL에 많은 부하가 가중된다. 2) 각각 다른 형태의 데이터들을 합치므로 매우 복잡한 과정을 거친다.(중복 데이터 관리도 힘들다.) 3) 대량의 데이터 유지 비용이 든다. 4) 비정형데이터는 정리되어 저장되지 못하는 경우 삭제될 수 있다.
2) 데이터 레이크 : Data Warehouse의 정보 분석 한계를 개선하기 위해 생긴 데이터 저장 개념 ,
Data Warehouse → 정형데이터를 가공하여 저장
Data Lake →정형, 비정형, 반정형데이터를 모두 원천의 형식으로 모두 저장
4. 데이터스트림 vs 배치 : 데이터는 적재 유형에 따라서도 구분이 가능합니다. 데이터의 적재 유형에 따라 데이터 처리 방법 또한 달라집니다.
* 데이터 적재 유형 1) Bounded Data : 일단 저장되면 이후 변화가 없는 데이터, 묶어서 한번에 일괄 처리한다. ex ) 월별매출 데이터... 2) Unbounded Data : 지속적으로 적재되어 끝을 지정할 수 없는 데이터 → 주기적 처리 또는 실시간 처리 ex ) 시스템 로그 데이터, 주식 가격 변동 데이터
1) 배치 처리(Batch Processing) : 대량의 데이터를 특정 시간 단위로 끊어서 처리 (시간별, 월별 등등)
2) 스트림 처리(Stream Processing) : 연속성 있는 데이터 처리 ex ) unbounded data 가 들어오면 실시간으로 필터링 등의 방법으로 처리하여 필요한 데이터만 생성하게 된다.
Micro Batch : 배치의 주기나 데이터 크기를 매우 작게 설정하여 실시간에 근접하게 처리하는 것
6. Data Workflow : 데이터 처리의 작업 절차
*DAG(Directed Acyclic Graph) : 방향성 비순환 그래프, 순환 구조가생기면 안된다.
*Apache Oozie *Apache Airflow(파이썬 가능)
7. 컴퓨터 클러스터 : 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합 - 물리적으로는 여러 대의 컴퓨터이지만 외부 사용자는 마치 한 대의 컴퓨터인 것처럼 사용 가능하다.
* SPOF(Single Point of Failure) : 단일 장애지점의 약자로, 시스템 구성 중에 한부분이 동작하지 않으면 전체 시스템이 중단되는 요소를 뜻한다. SPOF는 클러스터에 매우 치명적이다.
*HA(High Availability) : 고가용성, 서버와 네트워크, 프로그램 등의 시스템이 지속적으로 운영이 가능한 성질
→ 클러스터에서는 SPOF가 없어야 하며, HA가 유지되어야 한다.
8. Scale Up & Scale Out
1) Scale Up : 서버 자체 RAM, CPU, Disk 등의 구성요소 자체를 업그레이드하여 컴퓨팅 성능을 향상시키는 방법 2) Scale Out : 네트워크 상의 컴퓨터 수나 서버 수를 늘려 컴퓨팅 성능을 향상시키는 방법
9. SQL(Structured Query Language) : 관계형 데이터베이스의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다. 데이터베이스에서 정형 데이터분석을 위한 필수 요소이다.
* 관계형 데이터베이스 : 키와 값들의 간단한 관계를 테이블화시킨 매우 간단한 원칙의 전산정보 데이터베이스
*DDL (Data Definition Language) : 관계형 데이터베이스에 테이블 구조를 정의하고 생성하거나 기존의 테이블의 구조 변경 또는 삭제하는 명령어
#데이터베이스마다 언어가 조금씩 다를 수 있으니 주의하도록 하자. *DML(Data Manipulation Language) : 데이터베이스의 테이블에 들어있는 데이터들을 조회하거나 변경하는 명령어
*DCL(Data Control Language) : 데이터베이스에 있는 테이블에 대한 사용권한 부여나 회수를 위한 명령어
* TCL(Transaction Control Language) : 트랜잭션 제어 언어
#트랜젝션 : 수행 결과에 완전성을 보장하는 단위
10. 하둡(Hadoop) : Open Source Java Software Framework * 구성요소 : 하둡 분산 파일 시스템(HDFS : Hadoop Distributed File System, 저장 기능), 맵리듀스(연산 기능)
1) HDFS : 하둡의 분산형 파일 시스템
- Name Node : 파일의 메타정보를 관리 - Data Node : 실제 데이터를 저장하고 내보내는 역할
#Metadata : 데이터에 관한 구조화된 데이터로, 다른 데이터를 설명해 주는 데이터이다. 대량의 정보 가운데에서 찾고 있는 정보를 효율적으로 찾아내서 이용하기 위해 일정한 규칙에 따라 콘텐츠에 대하여 부여되는 데이터이다.
2) MapReduce : Map과 Reduce라는 두 개의 함수의 조합으로 분산/병렬 시스템에서 데이터를 처리하는 프레임워크이다. - Map : 나누어진 단위에서 계산 - Reduce : Key 별로 병합
11. Spark : In-Memory 기반 Open Source Cluster Computing Framework 분산환경에서 동작하는 메모리기반의 데이터처리 오픈소스
- Hadoop의 MapReduce와 유사한 역할을 하지만 Memory 활용을 극대화했기 때문에 연산속도가 월등히 빠르다. - 최근에는 Memory 가격이 많이 저렴해졌고, H/W성능이 많이 올라가서 MapReduce보다 Spark를 선호한다. - Scala, Python으로 개발이 가능하다.
* RDD(Resilient Distributed Datasets) : 스파크에서 활용되는 내부 데이터 모델
- 병렬처리가 가능 - 장애가 발생할 경우에도 스스로 복구한다. - 한번 생성되면 바뀌지 않고 다른 형태의 변환이 필요할 경우 새로운 RDD를 만들어냄 - 장애시 RDD 진행 절차를 기억했다가 그대로 수행하여 빠르게 복구한다.
12. Hive : 하둡 기반의 데이터 웨어하우스 소프트웨어 - SQL 기반의 데이터 요약, 질의 및 분석 기능을 제공한다.
- 하이브 활용 이유 : SQL을 활용하여 쉽게 코딩 가능하다. 하이브 외에도 presto, Apache Drill 등의 다른 SQL on Hadoop 프로그램들이 있다.
13. NoSQL(Not Only SQL) :
* NoSQL DB의 등장 배경 : - 관계형 데이터베이스의 한계점 도달 : 전통적인 관계형 데이터베이스는 테이블 간 관계를 통하여 다양한 데이터 조회가 가능했지만, 빅데이터 시대의 도래에 따라 대량의 데이터 적재에 따른 비용증가, 처리성능 한계라는 문제점 생겼다. 데이터 확장에도 많은 비용이 듦.
→ 관계형 데이터베이스의 일부 기능을 포기하더라도 확장에 유연하면서 저장/조회에 높은 성능이 요구되었다.
* 특성 :
- 고정형 Table, Schema 불필요 - 적재와 조회에 성능 최적화 - 테이블 간 관계형 설정 지양( Join 사용할 경우 성능 저하 ) - Scale Out을 통한 수평적 규모 확장이 가능 - 분산형 Database
* CAP 이론 - 분산 시스템에서 세 가지 속성을 모두 만족할 수 없다는 이론 - 일관성(Consistency) : 모든 사용자가 같은 순간에 같은 데이터를 볼 수 있다. - 가용성(Availability) : 모든 클라이언트는 항상 읽기 / 쓰기가 가능하다. - 분할성(Partition Tolerance) : 시스템이 물리적 네트워크로 분할된 상태에서 정상 동작한다.
* 관계형 데이터베이스의 특성 : ACID 트랜잭션이 안전하게 수행되는 것을 보장하기 위해 관계형 데이터베이스가 가져야 하는 특성 - 원자성(Atomicity) : 한 트랜잭션 안의 모든 작업은 모두 성공하거나 실패해야 한다. - 일관성(Consistency) : 한 트랜잭션이 성공하면 모든 데이터는 동시에 일관된 상태로 유지된다. - 고립성(Isolation) : 한 트랜잭션이 수행되는 동안 다른 트랜잭션이 수행될 수 없다. - 지속성(Durability) : 트랜잭션이 성공하면 해당 최종 상태는 영원히 반영되어야 한다.
* No SQL의 특성 : BASE - Basically Available : 데이터는 어떠한 경우에든 항상 활용될 수 있다.(ACID의 고립성과 대립되는 특성) - Soft-State : 분산 노드 간 업데이트는 데이터가 노드에 도달한 시점에 갱신 - Eventual Consistency : 일관성을 제공하되 모든 노드에서 동시에 보장되지는 않음 시간이 지나면 일관성이 보장되는 '지연된 일관성'을 보장한다.(ex : 핸드폰으로 페이스북 업데이트했는데 PC에서는 바로 보이지 않을 수 있음, 최종적으로는 일관성이 유지되나 시간차가 존재할 수 있다.)
* NoSQL의 활용 - 실시간 대용량 데이터 적재 필요시 - 테이블 간 Join 등의 처리가 거의 없는 경우 - 추후 DB 확장이 유연해야 하는 경우 * NoSQL의 주의점 - No SQL 특성에 맞는 Table 설계가 매우 중요하다. 관계형 데이터베이스와 전혀 다름. - 테이블 간 Join을 할 경우 성능 저하 심하다. - 유지보수에 따른 운영 인력 확인 필수
패스트캠퍼스 데이터분석 올인원 패키지 4주차 수강 후기입니다. 이번 주차는 머신 러닝 중 인공신경망을 활용한 기법인 딥러닝에 관한 강의였습니다.
1. Perceptron : 생물학적 뉴런을 모방하여 만든 인공신경망의 기본 단위
위와 같이 a,b라는 input을 받아서 합친 뒤 activation function을 통과하여 최종 출력을 내보내는 것을 볼 수 있습니다.(이 결과는 다음 Perceptron(혹은 뉴런)으로 전달되거나, 최종 Output으로 출력됩니다.)
2. 딥러닝 : Deep Neural Network를 이용한 Machine Learning 방법
아래 그림과 같이, Neural Network는 Input Layer, Hidden Layer, Output Layer로 구성됩니다. Input Layer와 Output Layer는 하나지만, Hidden Layer는 여러개일 수 있고, Hidden Layer가 2개 이상일 때 Deep Neural Network이라고 합니다. Hidden Layer가 늘어날수록, 더 정교한 모델을 만들 수 있지만, 계산량의 증가와 Overfitting을 항상 주의해야 합니다.
* 각각의 Node들을 하나의 Perceptron이라고 생각하시면 됩니다.
3. Gradient Descent
1) Weight(가중치)
*가중치:
위의 그림의 Hidden Layer의 각 Node(동그라미)들은 모두 가중치라는 값을 가지고 있습니다. 이 값들은 각 Node들의 결과값에 곱해진 후 다음 노드로 전달됩니다. Neural Network는 데이터를 사용하여 이 가중치들을 최적의 값으로 Update하는 것이 목표입니다.
1.1)가중치 초기화 #가중치의 초기값은 어떻게 설정할 것인가?
: 위에서 말했듯이, 가중치는 각 Node들의 결과값에 곱해집니다. 데이터를 사용하여 이 가중치의 값들은 Update(학습)되지만, 초기값을 설정해주는 것이 학습에 많은 영향을 끼칩니다. 예를 들어 0으로 Initialize 할 경우에는 뒤의 Node들로 전달되는 결과값들이 모두 0일 것이므로 학습이 되지 않을 것이고, 너무 큰 값으로 초기화하는 경우에도 학습이 제대로 되지 않을 수 있습니다. 가중치를 초기화하는데 주의해야 할 점은 가중치가 너무 작아져서 학습이 안되거나(Vanishing Gradient), 너무 커져서 학습이 안되는 경우(Exploding Gradient)를 방지해야 한다는 것입니다.
[1] Random Initialization : 말 그대로 Random하게 가중치를 초기화하는 것입니다. 하지만 가중치들을 말그대로 Random하게 초기화하는 것은 학습에 나쁜 영향을 미칠 수 있습니다. 따라서 Xevier Initialization이나, He Initialization등의 방법으로 적절한 분포를 가지는 범위 내에서 Random하게 가중치를 초기화하는 방법도 사용됩니다.
1.2) Loss Function(Cost Function) : Input Layer, Hidden Layer를 거쳐 최종적으로 Output Layer에 도착한 결과값은, Loss Function이란 함수에 넣어져 실제 값과의 차이를 계산하게 됩니다. 이 결과값이 오차이고, 이 오차를 줄이기 위하여 Loss Function을 미분하여 Loss Function을 감소시키는 방향으로 가중치를 Update하는 것이 Gradient Descent 입니다.
4. Mini-Batch 학습법 : Batch / Stochastic / Mini-batch GD 4.1) Batch Gradient Descent : 모든 Data에 대해서 Loss를 계산하여 다 더하고 이를 이용해서 Gradient Descent 진행 4.2) Stochastic Gradient Descent : Data를 1개만 뽑고, 그 Data에 대한 Loss가 대표값을 가진다고 생각하고 Gradient Descent 진행 4.3) Mini-Batch Gradient Descent : Batch/Stochastic의 중간 형태로 data를 n개 sampling한 뒤 그 n개 data에 대한 loss를 계산하여 다 더한 뒤 이를 이용하여 Gradient Descent 진행
5. back propagation : 역전파 Neural Network는 주어진 데이터를 활용하여 가중치를 Update함으로써 최적의 모델을 만듭니다. Output Layer에서 구해진 오차를 활용하여 가중치들을 Update해야 하는데, Update하는 방법이 역전파입니다. 역전파는 아래의 그림과 같이 각 단계별로 관계식을 구한 후 미분한 뒤, 이 미분값들을 모두 곱하여 Loss Function을 가중치로 편미분한 값을 구할 수 있습니다.
6. overfitting(과적합) : 모델을 학습시킬 때 일반적으로 데이터셋을 train, validation, test라는 세가지 데이터셋으로 나눕니다. Training set으로 학습시킬 때의 Error를 training error, Test Set의 데이터를 입력했을 때의 오차를 test error라고 하는데, 이 두가지 변수는 항상 동일한 것은 아닙니다. (이상적으로는 Training Error와 Test Error가 동일해야 합니다.) Training Set을 활용하여 학습하는 동안 training error가 너무 낮아지면, 모델이 새로운 데이터(Test Set)에 대해 반응을 못하여 test error가 높아질 수 있습니다. 이런 경우를 overfitting이라고 합니다. 이와 반대로 아예 학습이 잘 되지 않아 Training Error가 높은 경우를 underfitting 이라고 합니다.
7. CNN convolutional network는 컴퓨터비전에 활용되는 Deep Neural Network입니다.
Input 데이터를 convolution layer - pooling layer - fully connected layer를 통과시켜 최종 분류합니다.
8. Recurrent Neural Network * Sequence is important ! : 사람의 말을 해석할 때, 아래 글과 같이 앞뒤의 문맥을 이해하고 있는 것이 중요합니다. 아래 사진의 두 문장을 보았을 때 뒤의 문장은 동일하게 '이 영화 꼭 보세요!' 지만, 앞의 내용에 따라 완전히 다르게 해석될 수 있는 것을 알 수 있습니다. 이처럼 자연어 처리에서 언어를 해석할 때, 문맥이란 개념을 도입하기 위해 사용하는 Neural Network이 RNN입니다.
RNN은 아래 그림과 같이 Network들이 Sequence를 가지고 연결되어 있습니다. 이런 방식으로 앞의 해석 결과가 뒤의 해석 결과에도 영향을 미칠 수 있는 것입니다.
하지만 RNN은 아래와 같은 문제들을 가지고 있고, 이 문제들을 해결하기 위한 방법들도 어느정도 제시되어 있습니다.
문제 ) 1. Sequence가 길어지면 성능이 떨어진다. 2. Sequence가 길어지면 학습이 잘 안된다. 3. 오래전 입력에 대해서는 기억을 잘 못한다.
비지도학습의 한 종류로, 서로 대립하는 두 신경망(모델)을 경쟁시켜서 좋은 성능을 얻어내는 Deep Learning Algorithm 입니다. 아래 그림과 같이 하나의 생성 모델, 하나의 분류 모델이 있다고 가정해봅시다. 생성모델에서는 가짜 지폐 데이터를 생성하고, 분류모델에서는 이 데이터를 진짜/가짜로 분류합니다. 이 과정을 계속 반복하면서, 점점 더 정교하게 성능을 향상시키는 것입니다.
10. Tensorflow vs Pytorch Deep learning 의 대표적인 두가지 Framework로 특이사항은 아래와 같습니다. 저는 쓸데없는 고민을 정말 많이 하는 편인데요, 언어든 프레임워크든 고민하지 말고 아무거나 유명한 것들 중 하나를 제비뽑기로 뽑아서 빨리 시작해보는 것이 제일 좋은 방법 같습니다. 이것으로 4주차 학습일지를 마칩니다.