그룹 효과를 고려한 데이터 분할
모델을 실행하기 전에 데이터를 학습용과 테스트용으로 분할해야 해요. 이 데이터셋에는 한 가지 복잡한 점이 있어서, 그냥 sdf_random_split()만 호출하면 안 됩니다. 같은 아티스트의 트랙은 반드시 같은 세트에 들어가야 한다는 점이에요. 특정 아티스트의 트랙으로 모델을 학습시키고, 그 아티스트의 다른 트랙이 테스트 세트에 들어가면 모델이 실제보다 더 정확해 보일 수 있습니다.
이를 해결하는 요령은 아티스트 ID만 먼저 분할한 다음, 그렇게 분할된 ID를 원본 데이터셋에 내부 조인하는 것입니다. 트랙마다 아티스트 이름 표기가 달라질 수 있으므로, 분할에는 artist_name보다 artist_id가 더 신뢰할 만합니다. 예를 들어 Duke Ellington의 경우 아티스트 이름이 어떤 트랙에서는 "Duke Ellington"이고, 다른 트랙에서는 "Duke Ellington & His Orchestra"처럼 표기되거나 철자가 변형되기도 합니다.
이 연습은 강의의 일부입니다
R에서 sparklyr로 시작하는 Spark
연습 안내
Spark 연결은 spark_conn으로 생성되어 있습니다. Spark에 저장된 결합되고 필터링된 트랙 메타데이터/음색(timbre) 데이터를 가리키는 tibble은 track_data_tbl로 미리 정의되어 있습니다.
- 아티스트 ID를 학습용과 테스트용으로 분할하고 결과를
training_testing_artist_ids에 할당하세요.track_data_tbl에서artist_id열을 선택하세요.- 고유 행을 가져오세요.
- 이를 학습용 70%, 테스트용 30%로 분할하세요.
- 학습용 데이터셋을
artist_id로track_data_tbl과 내부 조인하여 결과를track_data_to_model_tbl에 할당하세요. - 테스트용 데이터셋을
artist_id로track_data_tbl과 내부 조인하여 결과를track_data_to_predict_tbl에 할당하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# track_data_tbl has been pre-defined
track_data_tbl
training_testing_artist_ids <- track_data_tbl %>%
# Select the artist ID
___ %>%
# Get distinct rows
___ %>%
# Partition into training/testing sets
___
track_data_to_model_tbl <- track_data_tbl %>%
# Inner join to training partition
___
track_data_to_predict_tbl <- track_data_tbl %>%
# Inner join to testing partition
___