[Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 1
https://dacon.io/competitions/official/236690/data
제 5회 ETRI 휴먼이해 인공지능 논문경진대회 - DACON
분석시각화 대회 코드 공유 게시물은 내용 확인 후 좋아요(투표) 가능합니다.
dacon.io
먼저 데이터를 까보자.
10명이 3달동안 핸드폰이랑 스마트워치를 차고 다닌 LifeLog를 기록하고, 그 다음날 아침 잠이 어땠는지 맞추는 데이터임.
10명이 대충 3달동안 참여해서 대충 700개 Row가 수집됐고, 이 중 일부를 학습에 쓰고 일부를 라벨 가리고 검증에 사용함.
데이터를 쭉 읽어보면.. 언제 폰이 켜졌고 그 때 어떤 활동을 했고 그 때의 밝기는 어땠는지를 저장한다.
12:03 폰 켜짐 / 걷는중 / 화면안봄 / 주변조도 534lux
12:23 워치 심박 측정 / 운동중
13:00 주변 소음 분석 / 차 탑승
...
이런 식으로 어떤 사람의 하루 일과 raw 데이터를 저장한다.
그리고 이 사람이 잘 때 침대 아래 Sleep Tracker가 자동으로 데이터를 측정함.
몇 시간 잤는지, 잠든 시간 비율, 잠들기까지 걸린 시간, 자다 깬 시간을 측정한다.
이제 다음날 아침에 일어나서 자가보고 진행. Q1 ~ Q3와 S1 ~ S4
해야할건 핸드폰 및 워치 로그가 주어질 때 라벨인 Q1 ~ Q3, S1 ~ S4 데이터를 채우는 것.
그런데 여기서 Sleep Tracker는 정답을 만들 때만 쓰고 Raw 출력을 주지 않음;
그러니 핸드폰과 워치 로그를 토대로 Sleep Tracker의 결과를 역추적 해야 한다.
여기서 Q1 ~ Q3 는 그 사람의 평균 대비 상태를 기록한 값이니.. 너무 상대적이긴 함
평소 대비 오늘은 어떤 상태인지를 예측하는 모델을 만들어야 한다.
맞춰야 할 라벨은 Q1 ~ Q3 + S1 ~ S4
Q1 ~ Q3은 스스로 생각했을 때 기본 상태보다 좋거나 나쁜지를 의미함
S1 ~ S4는 Sleep Tracker 기반으로 측정한 값으로 정량적임
일단 그냥 입력값만 보고 라벨을 측정하면 안됨. 어제의 라벨값이 지금의 라벨값에 영향을 줄 수 있다.
어제 잘 잤으면 오늘도 잘 잘 가능성이 높을 수도 있으니까.. 입력 피쳐를 조작한다면 성능이 좀 더 좋을 것
그러니 자기상관 정도를 알아야 한다. lag-k를 통해 입력 피쳐에 자기상관 관련 값을 추가할지 말지를 결정한다.

lag-1이 모든 작업에 일관성있게 0.15 ~ 0.30 을 보여준다.
그러니 어제의 결과가 오늘의 결과에 유의미한 영향을 미친다는 것.
이후 lag-2 lag-3에서는 떨어지다가 lag-7에서는 또 올라갔다.
단순히 시간이 지남에 따라서 감소한다면 lag-7에서 더 떨어져야 하는데 그게 또 아닌거임;
그러니 단순히 시간만 보는게 아니라 일주일 전인 특정 요일에 따라서 달라질 수 있다고 의심된다.
사실 그냥 데이터가 적어서 이렇게 보일 수도 있는데.. 일단 그건 배제하고 진행하자.
또 Q 시리즈와 S 시리즈 패턴이 좀 다르다.
Q 시리즈는 lag-1에서 가장 강하고 뒤로 갈수록 약해짐
S 시리즈는 lag-1과 lag-7이 거의 비슷함
셀프 피드백은 어제꺼 영향을 좀 많이 받고, Sleep Tracker 데이터는 요일 패턴에 더 영향을 받는듯.
자기상관 정도를 살펴봤으니 이제 Task간 상관성이 있는지 확인해야 한다.
Q1 ~ Q3 + S1 + S4 라벨이 각자 움직이는지 아님 얘내들끼리도 연관성이 있는지 확인해야 함.

일단 Q1은 S와 강하게 연결되고, Q2와 Q3는 S와 거의 무관하다.
Q1은 기상 직후 자가보고 / Q2와 Q3는 취침 직전 자가보고인데, Q1은 그날 잠의 결과이기에 그날 잠의 지표인 S와 연관됨.
Q2와 Q3는 잠자기 전 그날의 활동에 영향받기에 그날 밤의 잠과는 인과가 약함.
S 그룹 안에서는 S2 말고는 모두 다 독립적으로 동작한다. S2가 모두의 다리가 됨.
그러니.. 정리하면
라벨 7개는 서로 약하게 연결되고 바로 전날과 일주일 전이 좀 강하게 연관된다.
그러니 모델 구조는 기본적으로 Single-Task를 7번 실행하는 식으로 설계하고 Q1과 S1만 서로 Multi-Task로 묶어보자.
lag-k 피쳐는 lag-1와 lag-7을 사용하자.
이 정도까지 하고 가설을 세워보자.
가설 : 22:00 ~ 10:00 사이의 워치가 측정한 걸음 수의 합계가 적을수록 S1 이 1일 가능성이 높지 않을까?
애초에 잘때는 걸음수가 0이다.
그러니 야간 걸음수가 적다는 건, 침대에 오래 누워있다는거니까 잠을 길게 잔게 아닐까..

가설이 들어맞으려면 S1=1 이 더 적어야 하는데 약간 더 많이 나왔다.
일단 이 가설은 들어맞지 않음;
단순히 잠을 잘 잤다면 야간 걸음이 적은건 아닐수도?

나머지 Task와 야간 걸음수간의 연관을 살펴보자.
확인해보면 S2에서는 유의미한 신호를 보여주고 있다. 밤에 조금 걸으면 수면 효율이 좋은가보다.
일단 목표는 라벨이 1인 확률을 정확하게 예측하는 것. 그냥 라벨을 맞추는게 아니다.
그러니 예측 확률과 정답의 관계를 파악하기 위해 log-loss를 사용한다.
일단 baseline을 설정.
모든 행에 0.5를 찍어버리거나, 모든 행에 train의 전체 평균을 적용하거나, 각 사람의 평균 라벨 비율로 찍거나..
각 baseline별로 log-loss를 계산하면 각각 0.6931, 0.6641, 0.6231 으로 계산된다. 0.6231을 Sanity Baseline으로 사용한다.

야간 걸음수가 라벨과 관계된다면 걸음이 적은 그룹은 라벨이 1인 비율이 높을 것.
그러니 Train의 야간 걸음수를 기준으로 5등분하고 각 그룹의 S1 비율을 계산한다.
이러면 각 그룹의 S1 비율이 그 그룹의 예측 확률이 됨.
그냥 5등분만 하면 데이터를 외워버리게 되니까.. 5-fold Out Of Fold 기법을 사용한다.
5그룹으로 나누기 -> 1그룹은 Validation, 4그룹은 Train으로 사용해 예측 -> valid 역할을 수행하는 그룹만 돌려가며 반복
표를 확인해보면 Sanity Baseline보다 성능이 더 안 나오고 있다.
데이터를 보면 피실험자마다 라벨 평균이 천차만별인데, 그 정보를 무시해버리면 단일 피쳐인 야간 걸음 하나를 이길 수 없다는 것.
그러니 새로 피쳐를 만들 때 그 사람에 대한 정보를 포함해야 한다.
z-score를 사용해 그 값을 기준으로 평소보다 얼마나 더 위에 있는지, 더 아래에 있는지를 변환하자.

z-score는 이 사람의 평소 대비 오늘 걸음이 얼마나 적은지를 표현한다.
다시 5-fold Out Of Fold 기법으로 테스트했는데.. 여전히 Sanity Baseline은 이기지 못하지만, z-score를 적용했을 때가 절댓값을 적용했을 때 보다는 확실히 성능이 좋다는걸 확인할 수 있음.
z-score는 입력 단계에서 피실험자의 정보를 추가하는데, 출력 단계에서 정보를 다시 잃어버린다.
5등분 후 다시 평균을 낼 때 피실험자의 정보가 섞이게 되는게 문제. 모두 묶어서 접근하는 방식 자체가 문제임.
그러니 모델이 여러 피쳐와 피실험자의 정보를 함께 확인할 수 있어야 한다.
'Computer Science > Data Science' 카테고리의 다른 글
| [Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 3 (0) | 2026.05.09 |
|---|---|
| [Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 2 (0) | 2026.05.05 |
| [Data Science] Data Preprocessing & Feature Engineering (0) | 2026.04.14 |
| [Data Science] Statistical Data Analysis (0) | 2026.04.09 |
| [Data Science] Data Acquisition and Visualization (0) | 2026.03.28 |
댓글
이 글 공유하기
다른 글
-
[Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 3
[Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 3
2026.05.09 -
[Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 2
[Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 2
2026.05.05 -
[Data Science] Data Preprocessing & Feature Engineering
[Data Science] Data Preprocessing & Feature Engineering
2026.04.14 -
[Data Science] Statistical Data Analysis
[Data Science] Statistical Data Analysis
2026.04.09