이번 문제는 Nested Logic입니다. 간단한 문제이지만 괜히 이상하게 푼 것 같습니다..
이 문제는 책을 반납받을 때 내야하는 연체료를 계산하는 문제였습니다.
연체료를 내는 조건은 다음과 같습니다.
i) 반납 예정 일자 이전(혹은 당일)에 반납할 경우 0원
ii) 반납 예정 일자 이후에 반납할 경우 :
1) 같은 해, 같은 월에 반납할 경우 (연체된 일수 * 15)원
2) 같은 해 다른 월에 반납할 경우 (연체된 월수 * 500)원
3) 다른 해에 반납할 경우 10000원
변수 :
1) return_date_input : 입력 받은 반납 날짜 (Input Format은 'day month year'입니다.)
2) expected_date_input : 입력 받은 반납 예정 날짜
3) date_list : input들을 저장하는 list, string 을 가공하여 datetime 객체로 만든다.
4) return_date : datetime Format로 변경된 반납 날짜
5) expected_date : datetime Class로 변경된 반납 예정 날짜
방법 :
1) input을 datetime형식으로 변경하여 저장한다. (저는 연체 날짜가 1달을 넘어갈 경우 (연체된 달 * 500)이 아니라 (연체된 날짜 * 500)으로 이해해서 datetime형식으로 변환했습니다. 30일/31일/28일/29일 등 달마다 일의 개수는 다르니까요. 하지만 문제를 잘못 읽었었습니다.)
2) return_date의 연/월/일, expected_date의 연/월/일 비교를 통하여 연체료를 계산한다.
이 때 주의해야 할 점은,
1) Input format에서 연도는 항상 4자리가 아니다.(Datetime 객체로 변환할 시 문제가 됩니다.)
2) 반납 날짜와 반납 예정 날짜의 연도 / 월이 다르지만 연체료를 내지 않는 경우도 있습니다.(1년 혹은 1달 이상 빨리 반납했을 경우)
저는 [데이터 분석 입문 - 올인원 패키지] 의 내용을 아래와 같이 세 가지로 요약해보았습니다.
#1 데이터 분석은 무엇이고 이와 관련된 직업에는 무엇이 있을까?
#2 머신러닝 및 딥러닝이란 무엇이고, 데이터 분석에는 어떻게 사용되는가?
#3 기초 통계 상식 및 분석 방법
#4 실습
#1 데이터 분석은 무엇이고 이와 관련된 직업에는 무엇이 있을까?
1. 데이터 분석 정리 및 필요성
: 데이터 분석은 기술통계 및 시각화, 통계적 추론을 통하여 데이터에서 의사결정에 기반이 되는 INSIGHT를 얻어내는 과정이다. 데이터 분석은 아래와 같은 절차들을 거치게 되는데, 데이터 엔지니어, 데이터 분석가, 데이터 사이언티스트가 아래의 작업들을 나누어 수행하게 됩니다.(큰 회
사일수록 일이 더 세분화가 되어있을 확률이 높습니다.)
* 데이터 엔지니어 : 분석에 필요한 데이터 추출, 정제 등을 담당하는 직업이다. 데이터 파이프라인 설계, 데이터 웨어하우스 설계 등의 업무를 담당한다.
* 데이터 분석가 : 데이터들을 기반으로 분석 계획 및 가설을 세우고 가설 검증을 진행하는 직업이다. 분석 주제 발굴 및 데이터 모델링 등의 업무를 수행한다.
* 데이터 사이언티스트 : 데이터 분석가와 업무의 롤은 비슷하지만, 범위가 더 넓다. 빅데이터 처리 경험과 딥러닝 활용법들을 숙지하고, 기존 분석 방법에 더불어 활용할 수 있어야 한다.
위와 같은 데이터 분석 과정은 현업에서 다양한 방법으로 활용되고 있고, 데이터의 양적인 성장에 따라 중요성은 점점 더 강조되고 있습니다. 활용 사례들은 아래와 같습니다.
1) 현업에서의 데이터 분석 사례 :공공데이터 공공데이터는 환경, 수출 등 무수히 많은 데이터가 축적되고 있고,data.go.kr과 같은 사이트에서찾아볼 수 있습니다.
2) 현업에서의 데이터 분석 사례 : 제조업 제조업 데이터는 경우 변수 개수가 상당히 많습니다. 제조 공정별로 변수가 여러가지가 생성되기 때문에 중요 변수들을 잘 추출하여 분석하는 능력이 중요합니다.
1) 다중공선성 : 독립변수들간에 높은 선형관계가 존재하는 경우를 뜻하는 말로, 다중공선성이 높은 경우에는 변수를 적절히 제거할 필요가 있습니다. 2) 불균형 자료(예 : 양품 vs 불량 비율) : 대부분 제조업의 경우 불량 분석을 위해 빅데이터를 활용하는데, 양품의 비율이 불량의 비율보다 월등히 높습니다.(그렇지 않으면 이익이 나지 않겠죠?) 따라서 데이터의 불균형이 매우 심합니다.
3) 현업에서의 데이터 분석 사례 : 통신/마케팅
통신, 마케팅 분야에서는 데이터를 활용하여 아래와 같은 작업을 수행합니다.
1) 상품 추천 2) 영화 추천 3) 상권분석 및 매장분석
사용 알고리즘 : 연관규칙 알고리즘 : 특정 상품을 살때 어떤 상품을 같이 사는지 분석 협업필터링 : 비슷한 사람들을 분류하여 비슷한 마케팅 진행
4) 현업에서의 데이터 분석 사례 : 금융/보험
금융/보험 분야에서는 데이터를 활용하여 아래와 같은 작업을 수행합니다.
1) 고객이동경로분석 2) 신용평가 3) Fraud Detection System 4) 운전 습관을 통한 보험료율 책정/할인 5) 건강 관리를 통한 보험 할인 6) 보험 사기 방지
제약 사항 : 고객정보 공유 규제(유출 시 막대한 피해)
5) 현업에서의 데이터 분석 사례 : 헬스케어
금융/보험 분야에서는 데이터를 활용하여 아래와 같은 작업을 수행합니다.
1) 질병 감시/예측 서비스 2) 의료 빅데이터 및 AI : DNA, 진단정보, 의료차트 등을 활용한 예측 서비스 및 Computer Vision을 활용한 판정 빅데이터와 AI를 활용한 신약 후보물질 제안
#2. 기초 통계
1. 기술통계 : 수집한 자료를 분석하여 대상들의 속성을 파악하는 통계방법
- 평균(mean)
- 중앙값(median)
- 최빈값(mode)
- 분산(variance)
- 공분산(covariance)
- 상관계수(coefficient)
2. 추리통계 : 모집단에서 표본을 추출하고 표본의 기술통계를 통해 모집단의 특성을 추측하는 것
표본의 기술통계를 통해 모집단의 특성을 추측했을 때, 이 추측이 100% 맞진 않습니다. 따라서 우리는 신뢰구간이란 것을 정하여, 모집단의 특성이 표본을 통해 얻은 추측 범위 안에 들어갈 구간과 그 구간 안에 모집단이 들어갈 확률을 구합니다.
- 모집단: 연구 또는 분석의 전체 집단
* 모집단은 실시간으로 변하는 경우도 있어 모집단 전수 조사는 매우 어렵다.
- 신뢰구간 : 추리통계에서 예측한 모집단의 특성이 위치할 가능성이 높은 구간
- 신뢰수준 : 신뢰구간에 모집단의 특성이 위치할 확률
- 표본 : 모집단에서 추출한 일부로, 모집단의 속성들을 유추하는데 사용된다.
1) 확률표본추출방법 : 모집단에서 무작위로 표본을 추출하는 방법
2) 비확률표본추출방법 : 조사자의 편의나 판단에 의해 표본을 추출하는 방법
* 비확률표본추출방법에는 층화추출법 등 다양한 방법이 있습니다. 표본 추출 시에 편향된 표본을 고르는 것이 아닌지 항상 의심해봐야 합니다.
2. 변수의 종류 및 분석법 :
* Variables : 데이터를 구성하는 변수
1) Numerical : 숫자형 데이터
1.1) Continuous : 연속형
1.2) Discrete : 불연속형
2) Categorical : 범주형 데이터
2.1) Regular Categorical : Ordinal이 아닌 경우
2.2) Ordinal : 범주들 사이에 서열/순서가 존재하는 경우
* 척도
1) 비연속형 변수
- 명목척도: 상호배타적인 특성만을 가진 척도 ex) 남/여
- 서열척도: 명목척도 중 항목들 사이에 서열이나 순위가 존재하는 척도 ex) 언론에서 발표하는 대학 순위
2) 연속형 변수
- 등간척도: 서열척도들 중 항목들 간의 간격이 일정한 척도 ex) 섭씨온도 : 섭씨 0도는 열이 없는 상태가 아니기 때문에 섭씨온도는 등간척도이다.
- 비율척도: 등간척도 중 아무것도 없는 상태를 0으로 정할 수 있는 척도 ex) 무게
* 데이터 표현 방법
1) 도수분포표 : 특정 항목 또는 범위에 속하는 빈도수를 나타낸 표
2) 막대그래프 : 비연속형 변수에 사용되는 그래프, 항목별 빈도수를 나타냄
3) 히스토그램 : 연속형 변수에 사용되는 그래프
4) 선그래프 : 히스토그램의 끝 부분을 선으로 연결한 그래프
* 가설과 신뢰수준/유의확률
1)귀무가설(영가설): 연구가설과 반대되는 가설, 실제 분석이 이루어지는 가설
2) 대립가설(연구가설): 분석을 통해서 알아보고자 하는 내용으로 이루어진 가설
- 귀무가설은 하나의 통계값으로 나타낼 수 있어야 하며 귀무가설 과 대립가설은 동시에 참/거짓일 수 없다.
* 유의확률(p-value): 실제로는 귀무가설이 참임에도 통계분석을 통해 귀무가설을 거짓으로 판단할 가능성 : 실제 현상을 반영하지 못할 가능성
5) 다수준분석: 독립변수와 종속변수의 수준이 다른 경우, 독립변수와 종속변수는 개인수준이지만 조절변수의 수준이 다른 경우의 분석(복잡한 사회현상에 대해 분석)
# 머신 러닝 및 딥러닝
머신 러닝이란 컴퓨터가 데이터를 학습하는 알고리즘과 기술의 총칭이며 지도학습, 비지도학습, 강화학습으로 분류된다.
1. 지도학습(Supervised Learning)
: 입력 데이터(X)와 타겟값(Y)를 알고 있는 데이터를 학습하여, 이들의 관계를 모델링하는 방법
지도학습은 타겟변수(Y)의 형태에 따라 두 가지로 나뉠 수 있다.
1) 분류(Classification)
: 타겟변수 Y가 불연속형 변수(Discrete Variable)인 경우, 입력값(X)이 주어질 때 해당 입력값이 해당되는 클래스(Y)를 예측한다.
ex) 스팸 메일 분류, 얼굴 인식
2) 회귀(Regression) : 타겟변수 Y가 연속형 변수(Continuous Variable)인 경우 입력값 x가 주어질 때 해당 입력값과 매칭되는 Y값을 예측한다.
ex) 주가 예측
2. 비지도학습 : 타겟값(Y)이 없는 입력 데이터만이 주어질 때 학습하는 방법(입력 데이터에 내재되어 있는 특성을 찾아내는 용도)
1) 군집화(Clustering) : 유사한 포인트들끼리 그룹을 만드는 방법 2) 잠재 변수 모델(Latent Variable Model) : 표현된 데이터 속에 내재되어 있는 요인을 찾는 것 ex) 주성분 분석, 특이값 분해, 비음수 행렬 분해, 잠재 디리슐레 할당.... 3) 밀도 추정(Density Estimation) : 관측된 데이터를 이용하여 데이터 생성에 대한 확률밀도함수를 추정 4) 이상치 탐지 5) 인공신경망 기반 비지도학습(ex : GAN)
3. 강화학습
: 자신이 한 행동에 대한 "보상"을 바탕으로 목적을 달성하는 학습
4. 딥러닝 : 인공신경망을 활용하여 컴퓨터를 학습시키는 기법
* Perceptron : 생물학적 뉴런을 모방하여 만든 인공신경망의 기본 단위
< 실제 뉴런과 Perceptron의 비교 모습 >
위와 같이 a,b라는 input을 받아서 합친 뒤 activation function을 통과하여 최종 출력을 내보내는 것을 볼 수 있습니다.(이 결과는 다음 Perceptron(혹은 뉴런)으로 전달되거나, 최종 Output으로 출력됩니다.)
* DNN(Deep Neural Network) : 아래 그림과 같이, 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이라고 생각하시면 됩니다.
* 용어 :
1) Weight(가중치)
위의 그림의 Hidden Layer의 각 Node(동그라미)들은 모두 가중치라는 값을 가지고 있습니다. 이 값들은 각 Node들의 결과값에 곱해진 후 다음 노드로 전달됩니다. Neural Network는 데이터를 사용하여 이 가중치들을 최적의 값으로 Update하는 것이 목표입니다.
2) Loss Function(Cost Function) : Input Layer, Hidden Layer를 거쳐 최종적으로 Output Layer에 도착한 결과값은, Loss Function이란 함수에 넣어져 실제 값과의 차이를 계산하게 됩니다. 이 결과값이 오차이고, 이 오차를 줄이기 위하여 Loss Function을 미분하여 Loss Function을 감소시키는 방향으로 가중치를 Update하는 것이 Gradient Descent 입니다.
3) back propagation : 역전파 Neural Network는 주어진 데이터를 활용하여 가중치를 Update함으로써 최적의 모델을 만듭니다. Output Layer에서 구해진 오차를 활용하여 가중치들을 Update해야 하는데, Update하는 방법이 역전파입니다. 역전파는 아래의 그림과 같이 각 단계별로 관계식을 구한 후 미분한 뒤, 이 미분값들을 모두 곱하여 Loss Function을 가중치로 편미분한 값을 구할 수 있습니다.
4) 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 이라고 합니다.
* 딥러닝의 활용
1) CNN convolutional network는 컴퓨터비전에 활용되는 Deep Neural Network입니다.
2) Recurrent Neural Network * Sequence is important ! : 사람의 말을 해석할 때, 아래 글과 같이 앞뒤의 문맥을 이해하고 있는 것이 중요합니다. 아래 사진의 두 문장을 보았을 때 뒤의 문장은 동일하게 '이 영화 꼭 보세요!' 지만, 앞의 내용에 따라 완전히 다르게 해석될 수 있는 것을 알 수 있습니다. 이처럼 자연어 처리에서 언어를 해석할 때, 문맥이란 개념을 도입하기 위해 사용하는 Neural Network이 RNN입니다.
RNN은 아래 그림과 같이 Network들이 Sequence를 가지고 연결되어 있습니다. 이런 방식으로 앞의 해석 결과가 뒤의 해석 결과에도 영향을 미칠 수 있는 것입니다.
하지만 RNN은 아래와 같은 문제들을 가지고 있고, 이 문제들을 해결하기 위한 방법들도 어느정도 제시되어 있습니다.
문제 ) 1. Sequence가 길어지면 성능이 떨어진다. 2. Sequence가 길어지면 학습이 잘 안된다. 3. 오래전 입력에 대해서는 기억을 잘 못한다.
비지도학습의 한 종류로, 서로 대립하는 두 신경망(모델)을 경쟁시켜서 좋은 성능을 얻어내는 Deep Learning Algorithm 입니다. 아래 그림과 같이 하나의 생성 모델, 하나의 분류 모델이 있다고 가정해봅시다. 생성모델에서는 가짜 지폐 데이터를 생성하고, 분류모델에서는 이 데이터를 진짜/가짜로 분류합니다. 이 과정을 계속 반복하면서, 점점 더 정교하게 성능을 향상시키는 것입니다.
##5 lm( )과 rpart( )를 활용하여 ## 관심변수 charges를 나머지 변수로 설명하는 모형 적합하기
?lm
lm(insurance$charges ~ insurance$age)
ggplot(insurance, aes(x = age, y = charges)) + geom_jitter()
linear_model = lm(charges ~ age + bmi + sex + children + smoker + region , data = insurance) summary(linear_model) rpart_model = rpart(charges ~ age + bmi + sex + children + smoker + region , data = insurance) summary(rpart_model)
총 113강을 10주동안 공부했으니 일주일에 약 11개의 강의씩을 들은 셈입니다. 수강한 강의들에 대해서 평가하자면, 전반적으로 입문자를 대상으로 하고 있습니다. 요즘 데이터 사이언스가 핫하다고 하는데 뭐하는 직무 또는 학문일까? 라는 질문을 가지신 분이 가볍게 들어보시기에 좋은 것 같습니다. 실제로 113강도 하나의 강의당 평균 10분정도 남짓이라 수강 시간도 매우 짧았습니다.
좋은 점은 누구나 부담없이 들을 수 있는 수준의 강의라 좋았습니다. 단점은 강의가 모두 한명의 강사가 진행하는 것이 아니라서 강의내용이 일부분 겹치는 부분들이 있고, 전반적인 내용의 흐름이 아주 매끄럽진 않았습니다.
하지만 이후의 패스트캠퍼스의 강의들을 추가로 들을 예정인 저로써는 시작하기에 아주 좋은 강의였던 것 같습니다. 이상 끝-!
##5 lm( )과 rpart( )를 활용하여 ## 관심변수 charges를 나머지 변수로 설명하는 모형 적합하기
lm(insurance$charges ~ insurance$age)
ggplot(insurance, aes(x = age, y = charges)) + geom_jitter()
위의 그래프는 [나이 - 보험청구료] 산점도입니다. 관찰해보면 명확히 3개의 그룹으로 나눠져있는 것을 볼 수 있습니다.
linear_model = lm(charges ~ age + bmi + sex + children + smoker + region , data = insurance) summary(linear_model) rpart_model = rpart(charges ~ age + bmi + sex + children + smoker + region , data = insurance) summary(rpart_model)