본문 바로가기
빅데이터분석기사

빅데이터분석기사 실기 2회 문제 복원 및 후기

by Ha2JuO 2021. 6. 19.

제2회 빅데이터분석기사 실기 문제를 대략적으로 복원해 보는 중으로

 

문제에 대한 설명과 답이 틀릴 수 도 있어 

 

추후 정확환 답이나 문제에 대해 추가 업데이트 예정

 

대략적인 내용만 봐주세요 ㅎㅎㅎ.... 

 

답이 틀렸거나 정확한 답을 아시거나 하시면 알려주시면 감사하겠습니다^^

 

[빅데이터분석기사 단답형 복원 중]

데이터 전처리 단계에서 발견하는 값으로 기존 값들과 상이한 값??

답 : 이상치

 

정답지, label이 없다, 대표적분석에 군집분석, 인공신경망, 해당 기법을 뭐라하는가??

답 : 비지도학습

 

모델을 생성시 사용자가 직접 변경해줘야하는 것이 무엇일까요??

답 : 파라미터 ->  하이퍼파라미터

 

마지막 은닉층2개의 값 [02, -03] ,  가중치 [03, 0.1] , bias -0.05, 출력층 1개

f(x) = x , if x >= 0 , 그외 -1 일때 

답 : -1

 

결측값을 대치 하는 방법 중 평균값을 사용해 대치하는 방법은??

답 : 평균대치법

 

변수 선택 방법 중 모든 변수를 활용해 하나씩 제거해 가는 방법은??

답 : 후진제거법

 

모델의 학습에서는 정확도가 높게 나오지만 테스트 셋에서는 정확도가 낮게 나오는 것을 무엇이라하는가??

답 : 오버피팅

 

앙상블 기법 중 부스팅 종류, 약학습기?? 

답 : 랜덤포레스트  -> xgboost or gbm(Gradient boosting)

 

모델 학습시 잘못된 결과에 대해 가중치를 반영해 모델을 생성하는 방법??

답 : 베깅  -> 부스팅 

 

TPR , FPR 로 그려서 확인하는 곡선은

답 : ROC곡선

 

[빅데이터분석기사 작업형1 복원 중]

문제 1 :

보스턴 데이터 범죄율 컬럼 top10 중 10번째 범죄율 값으로 1~10위의 범죄율 값을 변경 후 AGE 변수 80이상의 범죄율 평균 산출

 

정답 : 5.759387

 

< 작업형1 - 1번 R 풀이 >

# Boston 데이터 불러오기
library(MASS) 
data(Boston)
# 보스턴(Boston)시의 주택 가격에 대한 데이터임

# --- 풀이 과정 --- #
# step 0) 데이터 확인
# step 1) 범죄율( CRIM 변수 ) 상위 10개 지역 찾기(정렬)
# step 2) 상위 10개 지역의 범죄율 값을 10번째에 해당하는 범죄율값으로 변경
# step 3) 범죄율이 변경된 전체 데이터에서 AGE 변수가 80 이상 데이터 추출
# step 4) AGE 변수가 80 이상 데이터의 범죄율 CRIM 변수의 평균값 산출

##### step 0) 데이터 확인 #####
### Boston 데이터 확인
str(Boston)
# data.frame': 506 obs. of  14 variables:
#  $ crim   : num  0.00632 0.02731 0.02729 0.03237 0.06905 ...
#  $ zn     : num  18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...
#  $ indus  : num  2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...
#  $ chas   : int  0 0 0 0 0 0 0 0 0 0 ...
#  $ nox    : num  0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...
#  $ rm     : num  6.58 6.42 7.18 7 7.15 ...
#  $ age    : num  65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...
#  $ dis    : num  4.09 4.97 4.97 6.06 6.06 ...
#  $ rad    : int  1 2 2 3 3 3 5 5 5 5 ...
#  $ tax    : num  296 242 242 222 222 222 311 311 311 311 ...
#  $ ptratio: num  15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...
#  $ black  : num  397 397 393 395 397 ...
#  $ lstat  : num  4.98 9.14 4.03 2.94 5.33 ...
#  $ medv   : num  24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...


##### step 1) crim 변수 값이 높은순으로 정렬 #####
### 데이터 상위 6개 확인
head(Boston)
#     crim  zn indus  chas    nox  rm    age  dis   rad   tax ptratio   black lstat medv
# 1 0.00632 18  2.31    0   0.538 6.575 65.2 4.0900   1   296    15.3   396.90  4.98 24.0
# 2 0.02731  0  7.07    0   0.469 6.421 78.9 4.9671   2   242    17.8   396.90  9.14 21.6
# 3 0.02729  0  7.07    0   0.469 7.185 61.1 4.9671   2   242    17.8   392.83  4.03 34.7
# 4 0.03237  0  2.18    0   0.458 6.998 45.8 6.0622   3   222    18.7   394.63  2.94 33.4
# 5 0.06905  0  2.18    0   0.458 7.147 54.2 6.0622   3   222    18.7   396.90  5.33 36.2
# 6 0.02985  0  2.18    0   0.458 6.430 58.7 6.0622   3   222    18.7   394.12  5.21 28.7

### 데이터 정렬
Boston <- Boston[order(-Boston$"crim"),]
head(Boston)
#        crim zn indus chas     nox    rm   age    dis rad  tax ptratio   black   lstat medv
# 381 88.9762  0  18.1    0   0.671 6.968  91.9 1.4165  24  666    20.2   396.90  17.21 10.4
# 419 73.5341  0  18.1    0   0.679 5.957 100.0 1.8026  24  666    20.2    16.45  20.62  8.8
# 406 67.9208  0  18.1    0   0.693 5.683 100.0 1.4254  24  666    20.2   384.97  22.98  5.0
# 411 51.1358  0  18.1    0   0.597 5.757 100.0 1.4130  24  666    20.2    2.60   10.11 15.0
# 415 45.7461  0  18.1    0   0.693 4.519 100.0 1.6582  24  666    20.2   88.27   36.98  7.0
# 405 41.5292  0  18.1    0   0.693 5.531  85.4 1.6074  24  666    20.2   329.46  27.38  8.5

##### step 2) crim 변수 값 상위 10개를 crim 변수 값 중 10번쨰 값으로 변경 #####
### 상위 10개 확인
print(Boston$"crim"[c(1:10)]) 
#  [1] 88.9762 73.5341 67.9208 51.1358 45.7461 41.5292 38.3518 37.6619 28.6558 25.9406

### 상위 10개 값 변경
Boston$"crim"[c(1:10)] <- Boston$"crim"[c(10)]
print(Boston$"crim"[c(1:10)]) 
#  [1] 25.9406 25.9406 25.9406 25.9406 25.9406 25.9406 25.9406 25.9406 25.9406 25.9406

##### step 3) 범죄율이 변경된 전체 데이터에서 AGE 변수가 80 이상 데이터 추출 #####
### age 80 이상 데이터 추출
Boston_age80 <- Boston[Boston$"age" >= 80,]
dim(Boston_age80) # 240 , 14

##### step 4) AGE 변수가 80 이상 데이터의 범죄율 CRIM 변수의 평균값 산출 #####
result <- mean(Boston_age80$"crim")
print(result) # 5.759387

### 정답 점검용
data(Boston)
chk_data <- Boston[Boston$"age" >= 80, ]
chk_mean <- mean(chk_data$"crim")
print(chk_mean) # 6.710741

 

문제 2 :

주어진 데이터 첫번째 행 부터 순서대로 80%까지의 데이터를 추출 후 'total_bedrooms' 변수의 결측값(NA)을 'total_bedrooms' 변수의 중앙값으로 대체하고 대체 전의 'total_bedrooms' 변수 표준편차값과 대체 후의 'total_bedrooms' 변수 표준편차 값 산출

 

정답 : 1.975147

 

데이터 : 캐글 캘리포니아 주택 데이터 세트 (https://www.kaggle.com/harrywang/housing?select=housing.csv)

참고 경로 : https://www.kaggle.com/camnugent/introduction-to-machine-learning-in-r-tutorial

 

 

Introduction to machine learning in R (tutorial)

Explore and run machine learning code with Kaggle Notebooks | Using data from California Housing Prices

www.kaggle.com

 

< 작업형1 - 2번 R 풀이 >

 

 

# 데이터 : 캐글 캘리포니아 주택 데이터 세트

# --- 풀이 과정 --- #
# step 0) housing 데이터 불러오기
# step 1) 첫번째 행 부터 순서대로 80% 데이터 추
# step 2) total_bedrooms 변수 결측값을 대체 전 표준편차 산출 
# step 3) 80% 추출 데이터  total_bedrooms 결측 제외 후 중앙값 산출
# step 4) total_bedrooms 변수 결측값을 중앙값으로 대체
# step 5) total_bedrooms 변수 결측값을 대체 후 표준편차 산출
# step 6) 대체 전과 대체 후의 표준편차 차이

##### step 0) housing 데이터 불러오기 #####
### 데이터 로드
housing = read.csv('../housing.csv')
### 데이터 확인
str(housing)
# 'data.frame':	20640 obs. of  10 variables:
#   $ longitude         : num  -122 -122 -122 -122 -122 ...
# $ latitude          : num  37.9 37.9 37.9 37.9 37.9 ...
# $ housing_median_age: num  41 21 52 52 52 52 52 52 42 52 ...
# $ total_rooms       : num  880 7099 1467 1274 1627 ...
# $ total_bedrooms    : num  129 1106 190 235 280 ...
# $ population        : num  322 2401 496 558 565 ...
# $ households        : num  126 1138 177 219 259 ...
# $ median_income     : num  8.33 8.3 7.26 5.64 3.85 ...
# $ median_house_value: num  452600 358500 352100 341300 342200 ...
# $ ocean_proximity   : chr  "NEAR BAY" "NEAR BAY" "NEAR BAY" "NEAR BAY" ...

##### step 1) 첫번째 행 부터 순서대로 80% 데이터 추출 #####
### 데이터 추출
rownum_end <- nrow(housing) * 0.8  #  16512
housing <- housing[c(1:rownum_end),] # 1 ~ 16512 데이터 추출

### 데이터 확인
str(housing)
# 'data.frame':	16512 obs. of  10 variables:
#   $ longitude         : num  -122 -122 -122 -122 -122 ...
# $ latitude          : num  37.9 37.9 37.9 37.9 37.9 ...
# $ housing_median_age: num  41 21 52 52 52 52 52 52 42 52 ...
# $ total_rooms       : num  880 7099 1467 1274 1627 ...
# $ total_bedrooms    : num  129 1106 190 235 280 ...
# $ population        : num  322 2401 496 558 565 ...
# $ households        : num  126 1138 177 219 259 ...
# $ median_income     : num  8.33 8.3 7.26 5.64 3.85 ...
# $ median_house_value: num  452600 358500 352100 341300 342200 ...
# $ ocean_proximity   : chr  "NEAR BAY" "NEAR BAY" "NEAR BAY" "NEAR BAY" ...

### 데이터 결측 확인
summary(housing)
# longitude         latitude     housing_median_age  total_rooms    total_bedrooms     population      households     median_income     median_house_value  ocean_proximity  
# Min.   :-124.3   Min.   :32.54   Min.   : 1.00      Min.   :    2   Min.   :   1.0   Min.   :    3   Min.   :   1.0   Min.   : 0.4999   Min.   : 14999    Length:16512   
# 1st Qu.:-121.2   1st Qu.:33.87   1st Qu.:19.00      1st Qu.: 1439   1st Qu.: 297.0   1st Qu.:  792   1st Qu.: 280.0   1st Qu.: 2.5250   1st Qu.:118300    Class :character
# Median :-118.3   Median :34.10   Median :30.00      Median : 2105   Median : 436.0   Median : 1168   Median : 410.0   Median : 3.4750   Median :173800    Mode  :character
# Mean   :-119.1   Mean   :35.25   Mean   :29.28      Mean   : 2637   Mean   : 544.2   Mean   : 1438   Mean   : 503.6   Mean   : 3.8005   Mean   :202067    
# 3rd Qu.:-117.9   3rd Qu.:37.69   3rd Qu.:38.00      3rd Qu.: 3109   3rd Qu.: 648.0   3rd Qu.: 1727   3rd Qu.: 604.0   3rd Qu.: 4.6389   3rd Qu.:253600    
# Max.   :-114.3   Max.   :41.95   Max.   :52.00      Max.   :39320   Max.   :6445.0   Max.   :35682   Max.   :6082.0   Max.   :15.0001   Max.   :500001    
#                                                                     NA's   :159                                                                           


##### step 2) total_bedrooms 변수 결측값을 대체 전 표준편차 산출 #####
tb_bf_sd <- sd(housing$"total_bedrooms", na.rm = TRUE) # 435.9006
                                                                    
##### step 3) 80% 추출 데이터  total_bedrooms 결측 제외 후 중앙값 산출 #####
tb_median <- median(housing$"total_bedrooms", na.rm = TRUE) # 436

##### step 4) total_bedrooms 변수 결측값을 중앙값으로 대체 #####
housing$"total_bedrooms"[is.na(housing$"total_bedrooms")] <- tb_median

##### step 5) total_bedrooms 변수 결측값을 대체 후 표준편차 산출 #####
tb_af_sd <- sd(housing$"total_bedrooms") # 433.9254

##### step 6) 대체 전과 대체 후의 표준편차 차이 #####
result <- tb_bf_sd - tb_af_sd
print(result) # 1.975147

##### check : 원본데이터의 total_bedrooms 표준편차#####
housing = read.csv('../housing.csv')
chk_sd <- sd(housing$"total_bedrooms", na.rm = TRUE) # 421.3851

 

문제 3 :  데이터의 특정컬럼의 이상치(이상치 기준 : 평균 + (표준편차 * 1.5) )를 찾아 이상치들의 합 산출 

데이터 : 뭔가 넥플릭스 데이터 같은 데이터임 (건수가 기억안남)

풀이 : 

평균 60, 표준편차 30, 표준편차 *1.5 = 45

105이상? 220 건 

19.5이하? 317 건

정답 : 약 32000? 

 

< 작업형1 - 3번 R 풀이 >

# --- 풀이 과정 --- #
# 작업중 #

 

[빅데이터분석기사 작업형2 복원 중]

문제 : 고객 구매 데이터를 사용해서 고객이 주문한 물품이 제 시간에 도착여부(Reached.on.Time_Y.N) 예측

데이터 : tranin 데이터와 , 정답 label이 없는 test 데이터 제공

데이터 경로 : ( https://www.kaggle.com/prachi13/customer-analytics?select=Train.csv )

 

답 : 이건 개인마다 다른 풀이가 있음

 

< 작업형2 R 풀이 >

# --- 풀이 과정 --- #
# 작업중 #

 

* 데이터를 불러오는 코드를 제공해주었으며,  제출용 write.csv 예시를 주석처리하여 제공해줌, 패키지의 경우 전체 패키지 리스트를 출력해서 볼수 있는 코드를 시험 알리창('종모양')에 제공 

댓글