Project

오늘의 목표 및 진척상황

  • 파생변수 추가에 대한 Logic 정리

직면했던 문제와 학습한 내용

  1. 파생변수 추가에 대한 Logic 정리

    내가 수행하고 있는 이 Task를 잘 수행하기 위해선 파생변수를 잘 만드는 것이 중요하다고 한다. 이 이유가 무엇이고, 어떤 파생변수를 어떻게 추가하는게 좋을지 고민해봤다.

    먼저, 이 Task가 하고자 하는 바는 무엇인가?

    User가 문제(Item)를 맞췄는지 아닌지를 예측하는 문제이다. 정형 데이터로 Table형태의 데이터이고, 각 행은 User와 Item의 정보가 들어있는 형태이다.

    이에, 이 User가 어떤 User인지, 이 Item이 어떤 Item인지 잘 표현하는 정보를 주는 것이 좋을 것 같다. 왜냐하면, User와 Item의 ID 자체로는 해당 개체에 대한 정보가 거의 없기 때문이다. 이 User가 어떤 User인지, 이 Item이 어떤 Item인지를 표현해줘야, Model 이 안에서 패턴을 찾을 수 있다고 생각한다.

    즉, 각 User(혹은 Item)가 다른 User들(혹은 Item들)과 구별되는 특징을 추가로 표현해주는 것이 좋을 것 같다.

    그럼, User와 Item은 수많은 특징을 가질텐데 그 안에서 어떤 특징을 표현해줘야 하는가? 우리의 Task에 적합한 특성이라 함은 무엇인가?

    우리의 Task는 결국 정답 여부를 예측하는 문제이다. 그러니, 각 User에 대한 구분은, User의 정답 여부에 대한 구분을 의미한다. (Item도 동일하다.) 이는 곧, 해당 User(혹은 Item)가 특정 조건에서 정답률이 달라지는가를 통해 표현될 수 있을 것 같다.

    만약, 학생의 몸무게와 같은 정보가 있다고 하더라도 정답률과 관련이 없다면, 이를 배제하는 것이 적합한 접근방법이라고 생각한다. 문제(Item)를 많이 푼 User일 수록 정답률이 높아진다고 한다면, 문제를 푼 횟수는 User를 구분할 수 있는 좋은 Feature로 여길 수 있다고 생각한다.

    위와 같은 정보는 조건에 따른 경향성으로 파악할 수 있으리라 생각한다. 특정 조건으로 구분하였을 때, 해당 조건의 User(혹은 Item)가 다른 그룹과 구별되는지로 판별 가능할 것이다.

    즉, 해당 조건을 기준으로 그룹 간의 정답률 차이와 경향성이 존재한다면, 이는 Feature로 사용할 수 있으리라 생각한다. 예를 들어, Item의 Knowledge Tag에 따라 정답률이 다르다면, 이는 곧 해당 Item의 중요한 특징이 되리라 생각한다.

    다시 정리하면, 정답률이 달라지도록 만드는 특징을 파생변수로 채택하는 것이 적합하다고 생각한다.

    위 가설을 기반으로, 정답률이 달라지는 특징을 찾았다면, 이를 어떻게 잘 표현해 줄 것인가? 즉, 특징의 정보를 어떻게 하면 더 잘 전달할 수 있을까에 대해 고민해보자.

    예를 들어, 문제를 푼 횟수에 따라 정답률이 달라진다면, 이를 어떻게 Feature로 표현하는게 좋을까? 한 User가 1000개의 문제를 풀었다면, 문제를 푼 갯수인 1000개를 입력해주는게 좋을까, 1000개를 푼 User들의 평균 정답률을 입력해주는게 좋을까?

    다른 예시로, User가 Knowledge Tag마다 정답률이 다르다면, 이를 어떻게 Feature로 표현하는게 좋을까? 해당 Item이 어떤 Knowledge Tag에 속하는지만 입력하면 충분할까, User가 해당 Knowledge Tag에 대해 갖는 정답률을 입력해주는게 좋을까?

    위 예시에서는 1000개라는 개수의 입력, 아래는 User가 Knowledge에 대해 갖는 정답률을 입력해주는 게 좋을 것 같다. 왜냐하면, 1000개를 푼 User들의 평균과 같은 정답률은, 하나의 User에 대한 정보로 보기 어렵기 때문이다. 아래도 마찬가지로, 후자가 User의 특성을 더 잘 표현하기 위한 목적에 적합하다고 여겨진다.

두 번째의 예시에서, User와 Item의 상호작용에 의한 특성이 파생될 수 있다고 생각한다. 이는 어느정도까지 표현해주는 것이 좋을까?

예를 들어, User와 해당 Item의 상호작용으로, 해당 Item의 정답률을 표기한다면, 이는 거의 Label을 표시해주는 것과 다름이 없을 것이다. (심지어 Test Set의 Target Data에는 만들 수 없다.)

그럼 어느정도까지가 적당할까? 하나의 문제지(TestID)에는 문제(Item)가 평균적으로 5~6개 정도 있다. 하나의 Tag(KnowledgeTag)에는 문제(Item)가 평균적으로 65개 정도 있다. 하나의 대분류(1~9)에는 문제(Item)가 평균적으로 120개 정도 있다.

User가 각 Tag와 대분류에 대해 어느정도의 정답률을 갖는지를 추가해주는 것은 괜찮지 않을까? 해당 User가 Item과의 상호적인 특성을 표현하는데 적합한 정도가 아닐까?

So, 위와 같은 Logic으로 결론을 내보면 다음과 같다.

  1. 이 Task를 잘 수행하기 위해선 각 User, Item이 잘 구분 될 수 있는 Feature를 추가해야 한다.
  1. 필요한 Feture는 각 User와 Item이 다른 그룹의 것들과 정답률이 달라지는 조건을 의미한다.
  1. Feature에 의한 값은 해당 User나 Item이 다른 그룹과 구별될 수 있는 정보로 추가되어야 한다.
  1. Feature는 Label Licking을 고려하여 추가되어야 한다.

추가로 진행 할 사항

  • 파생변수 추가 및 성능 실험

'네이버 부스트캠프 AI Tech' 카테고리의 다른 글

[P4] Day 85 (21.06.01)  (0) 2021.06.26
[P4] Day 84 (21.05.31)  (0) 2021.06.26
[P4] Saturday 30 May (21.05.30)  (0) 2021.06.26
[P4] Day 83 (21.05.28)  (0) 2021.06.26
[P4] Day 82 (21.05.27)  (0) 2021.06.26

+ Recent posts