{
  "id": 97750,
  "title": "Evaluation metric 질문",
  "url": "/competitions/2019-3rd-ml-month-with-kakr/discussion/97750",
  "author_name": "",
  "post_date": "2019-06-28T18:04:13.444800100Z",
  "votes": 3,
  "comment_count": 6,
  "views": 0,
  "content": "<p>이번 competition의 metric이 micro f1-score인 것으로 알고 있는데요\n제출을 할 때 보니 모든 test data에 대해 prediction을 해야 하더라고요\n이렇게 하면 전체 false positive와 false negative 개수가 같아져서\nprecision = recall = f1-score가 되지 않나요?</p>\n\n<p>혹시 class에 존재하지 않는 값을 넣으면 positive에서 뺄 수 있나 확인해보려고 하나의 prediction 값을 0으로 바꿔 넣어보았는데, score에 변화가 없는 걸로 봐서는 false negative와 관계없이 false positive를 줄일 수 있는 방법이 없는 것 같습니다</p>\n\n<p>제 생각에는 지금 metric은 f1-score이 아닌 recall로 측정되고 있는 것 같은데 한번 확인해주시면 좋겠습니다. 혹시 제가 잘못 생각하고 있는게 있으면 알려주세요.\n감사합니다 ㅎㅎ</p>",
  "messages": [
    {
      "id": "563820",
      "postDate": "06/28/2019 18:04:13",
      "content": "<p>이번 competition의 metric이 micro f1-score인 것으로 알고 있는데요\n제출을 할 때 보니 모든 test data에 대해 prediction을 해야 하더라고요\n이렇게 하면 전체 false positive와 false negative 개수가 같아져서\nprecision = recall = f1-score가 되지 않나요?</p>\n\n<p>혹시 class에 존재하지 않는 값을 넣으면 positive에서 뺄 수 있나 확인해보려고 하나의 prediction 값을 0으로 바꿔 넣어보았는데, score에 변화가 없는 걸로 봐서는 false negative와 관계없이 false positive를 줄일 수 있는 방법이 없는 것 같습니다</p>\n\n<p>제 생각에는 지금 metric은 f1-score이 아닌 recall로 측정되고 있는 것 같은데 한번 확인해주시면 좋겠습니다. 혹시 제가 잘못 생각하고 있는게 있으면 알려주세요.\n감사합니다 ㅎㅎ</p>",
      "rawMarkdown": "이번 competition의 metric이 micro f1-score인 것으로 알고 있는데요\n제출을 할 때 보니 모든 test data에 대해 prediction을 해야 하더라고요\n이렇게 하면 전체 false positive와 false negative 개수가 같아져서\nprecision = recall = f1-score가 되지 않나요?\n\n혹시 class에 존재하지 않는 값을 넣으면 positive에서 뺄 수 있나 확인해보려고 하나의 prediction 값을 0으로 바꿔 넣어보았는데, score에 변화가 없는 걸로 봐서는 false negative와 관계없이 false positive를 줄일 수 있는 방법이 없는 것 같습니다\n\n제 생각에는 지금 metric은 f1-score이 아닌 recall로 측정되고 있는 것 같은데 한번 확인해주시면 좋겠습니다. 혹시 제가 잘못 생각하고 있는게 있으면 알려주세요.\n감사합니다 ㅎㅎ",
      "votes": null
    },
    {
      "id": "565137",
      "postDate": "06/30/2019 13:44:22",
      "content": "<p>답변입니다.</p>\n\n<ul>\n<li><code>이렇게 하면 전체 false positive와 false negative 개수가 같아져서 precision = recall = f1-score가 되지 않나요?</code>  </li>\n</ul>\n\n<p>*이번 컴페티션의 데이터를 EDA를 해보시면 아시겠지만 각 클래스별 size가 동일하지 않습니다.  말씀하신대로 모든 클래스의 size가 균일하다면 micro-f1 값은 precision = recall = f1-score가 맞습니다.  하지만, class 사이즈가 다른 경우에 micro-f1을 포함 3개의 값은 모두 다를 수 있습니다. * 틀린 설명입니다 아래를 참고해주세요</p>\n\n<ul>\n<li><code>혹시 class에 존재하지 않는 값을 넣으면 positive에서 뺄 수 있나 확인해보려고 하나의 prediction 값을 0으로 바꿔 넣어보았는데, score에 변화가 없는 걸로 봐서는 false negative와 관계없이 false positive를 줄일 수 있는 방법이 없는 것 같습니다</code>    </li>\n</ul>\n\n<p>의 이유는 아마 값을 바꾼 '하나'의 prediction이 public score와는 상관없는 private id 값일 수 있습니다. (public : private = 34 : 66) 1개가 아닌 10개정도를 한번 시도해 보신다면 점수 변화가 있을 것으로 예상됩니다.   </p>\n\n<p>혹시 위에 내용에서도 틀린게 있을 수 있으니 무엇이든지 의견 부탁드립니다 😄 </p>",
      "rawMarkdown": "답변입니다.\n\n- `이렇게 하면 전체 false positive와 false negative 개수가 같아져서 precision = recall = f1-score가 되지 않나요?`  \n\n*이번 컴페티션의 데이터를 EDA를 해보시면 아시겠지만 각 클래스별 size가 동일하지 않습니다.  말씀하신대로 모든 클래스의 size가 균일하다면 micro-f1 값은 precision = recall = f1-score가 맞습니다.  하지만, class 사이즈가 다른 경우에 micro-f1을 포함 3개의 값은 모두 다를 수 있습니다. * 틀린 설명입니다 아래를 참고해주세요\n\n- `혹시 class에 존재하지 않는 값을 넣으면 positive에서 뺄 수 있나 확인해보려고 하나의 prediction 값을 0으로 바꿔 넣어보았는데, score에 변화가 없는 걸로 봐서는 false negative와 관계없이 false positive를 줄일 수 있는 방법이 없는 것 같습니다`    \n\n의 이유는 아마 값을 바꾼 '하나'의 prediction이 public score와는 상관없는 private id 값일 수 있습니다. (public : private = 34 : 66) 1개가 아닌 10개정도를 한번 시도해 보신다면 점수 변화가 있을 것으로 예상됩니다.   \n  \n혹시 위에 내용에서도 틀린게 있을 수 있으니 무엇이든지 의견 부탁드립니다 😄",
      "votes": null
    },
    {
      "id": "565336",
      "postDate": "06/30/2019 19:32:17",
      "content": "<p>답변 감사합니다\n클래스 size가 동일하지 않으면 값이 다를 수도 있다는게 약간 이해가 안되는데요\n예를 들어 A, B, C 3개의 클래스가 있고 test set에 7개의 instance가 있다고 가정하겠습니다\n| idx | 1 | 2 | 3 | 4 | 5 | 6 | 7 |\n| --- | --- | --- | --- | --- | --- | --- | --- |\n| True | A | A | A | B | B | C | C |\n| Pred | A | A | C | B | C | C | B |</p>\n\n<p>위와 같이 예측이 되었다고 할 때 각 클래스 별 TP, TN, FP, FN을 찾아보면</p>\n\n<p>|  | TP | TN | FP | FN |\n| --- | --- | --- | --- | --- |\n| A| 1, 2 | 4, 5, 6, 7 |  | 3 |\n| B | 4 | 1, 2, 3, 6 | 7 | 5 |\n| C | 6 | 1, 2, 4 | 3, 5 | 7 |</p>\n\n<p>micro Precision = (TP_A + TP_B + TP_C) / (TP_A + TP_B + TP_C + FP_A + FP_B + FP_C)\nmicro Recall = (TP_A + TP_B + TP_C) / (TP_A + TP_B + TP_C + FN_A + FN_B + FN_C)</p>\n\n<p>micro Precision = (2 + 1 + 1) / (2 + 1 + 1 + 0 + 1 + 2) = 4/7\nmicro Recall = (2 + 1 + 1) / (2 + 1 + 1 + 1 + 1 + 1) = 4/7</p>\n\n<p>클래스가 달라도 이렇게 동일하게 되지 않나요?\n여기서 인스턴스를 하나 추가했을때 옳게 예측되면 해당 클래스 TP가 1증가하고 나머지 클래스의 TN이 1씩 증가하므로 Precision, Recall의 분자, 분모에 1씩 더해져 여전히 Pr, Rc이 같을 것이고\n추가된 인스턴스가 잘못 예측되면 True class의 FN이 1 증가하고 Pred class의 FP가 1 증가하고 나머지 클래스의 TN이 1씩 증가하므로 분모에만 1씩 더해져 여전히 Pr, Rc가 같으니 귀납적으로 항상 Pr, Rc가 같지 않을까요?</p>\n\n<p>제가 multi class에서의 micro precision, recall 개념을 잘못 이해하고 있는 것 일 수도 있는데 혹시 틀린게 있으면 알려주세요. 감사합니다 ㅎㅎ</p>",
      "rawMarkdown": "답변 감사합니다\n클래스 size가 동일하지 않으면 값이 다를 수도 있다는게 약간 이해가 안되는데요\n예를 들어 A, B, C 3개의 클래스가 있고 test set에 7개의 instance가 있다고 가정하겠습니다\n| idx | 1 | 2 | 3 | 4 | 5 | 6 | 7 |\n| --- | --- | --- | --- | --- | --- | --- | --- |\n| True | A | A | A | B | B | C | C |\n| Pred | A | A | C | B | C | C | B |\n\n위와 같이 예측이 되었다고 할 때 각 클래스 별 TP, TN, FP, FN을 찾아보면\n\n|  | TP | TN | FP | FN |\n| --- | --- | --- | --- | --- |\n| A| 1, 2 | 4, 5, 6, 7 |  | 3 |\n| B | 4 | 1, 2, 3, 6 | 7 | 5 |\n| C | 6 | 1, 2, 4 | 3, 5 | 7 |\n\nmicro Precision = (TP\\_A + TP\\_B + TP\\_C) / (TP\\_A + TP\\_B + TP\\_C + FP\\_A + FP\\_B + FP\\_C)\nmicro Recall = (TP\\_A + TP\\_B + TP\\_C) / (TP\\_A + TP\\_B + TP\\_C + FN\\_A + FN\\_B + FN\\_C)\n\nmicro Precision = (2 + 1 + 1) / (2 + 1 + 1 + 0 + 1 + 2) = 4/7\nmicro Recall = (2 + 1 + 1) / (2 + 1 + 1 + 1 + 1 + 1) = 4/7\n\n클래스가 달라도 이렇게 동일하게 되지 않나요?\n여기서 인스턴스를 하나 추가했을때 옳게 예측되면 해당 클래스 TP가 1증가하고 나머지 클래스의 TN이 1씩 증가하므로 Precision, Recall의 분자, 분모에 1씩 더해져 여전히 Pr, Rc이 같을 것이고\n추가된 인스턴스가 잘못 예측되면 True class의 FN이 1 증가하고 Pred class의 FP가 1 증가하고 나머지 클래스의 TN이 1씩 증가하므로 분모에만 1씩 더해져 여전히 Pr, Rc가 같으니 귀납적으로 항상 Pr, Rc가 같지 않을까요?\n\n제가 multi class에서의 micro precision, recall 개념을 잘못 이해하고 있는 것 일 수도 있는데 혹시 틀린게 있으면 알려주세요. 감사합니다 ㅎㅎ",
      "votes": null
    },
    {
      "id": "565343",
      "postDate": "06/30/2019 19:43:35",
      "content": "<p>그래서 제 생각에는\n예를들어 위 표에서 7번 instance가 Pr(A)=0.3, Pr(B)=0.4, Pr(C)=0.3 처럼 모호한 score에서부터 B로 예측되었고, 이런 예측을 뺀다면 B의 FP가 1 줄어들 것이고\nmicro Precision = 4/6, micro Recall = 4/7이 되어 Pr != Rc이 되지 않을까 합니다</p>",
      "rawMarkdown": "그래서 제 생각에는\n예를들어 위 표에서 7번 instance가 Pr(A)=0.3, Pr(B)=0.4, Pr(C)=0.3 처럼 모호한 score에서부터 B로 예측되었고, 이런 예측을 뺀다면 B의 FP가 1 줄어들 것이고\nmicro Precision = 4/6, micro Recall = 4/7이 되어 Pr != Rc이 되지 않을까 합니다",
      "votes": null
    },
    {
      "id": "565899",
      "postDate": "07/01/2019 14:20:44",
      "content": "<p>죄송합니다. 제가 정말 기가막힌 착각을 하고 있었습니다... <br>\n먼저 이렇게 알려주셔서 정말 감사드립니다. <br>\n말씀하신대로 micro-f1 은 현재 데이터셋에서 precision recall f1-score 모두 같게 나옵니다. <br>\n이는 제가 방금 테스트해본 결과입니다. 캐글의 Mean F1 Score는 micro -f1 이며 메트릭 결과는 precision과 recall f1-score 동일합니다.   </p>\n\n<p>그리고 제가 말씀드린 클래스 사이즈가 다르다는 말은 잘못 말한 것입니다. 클래스 사이즈가 다르다가 아니라 데이터셋 사이즈가 다르다 입니다. 데이터 셋 자체가 너무 버라이어티 해서 데이터셋이 여러개의 사이즈를 가지고 있다 한다면 각 클래스별 confusion matrix는 독립적으로 만들어 질 것입니다.(하나의 데이터셋에서 만들어지지 않는다)  </p>\n\n<p>지금 주어진 데이터셋에 micro-f1 메트릭이 과연 적절한지 저도 의문스럽습니다. <br>\n하지만, 지금 Inclass로 저희가 설정할 수 있는 F1 메트릭은 micro버전을 제외하곤 커스텀으로 설정할 수 없게 되어있습니다. 다른 공개 컴페티션과는 다른점인것 같습니다....  </p>",
      "rawMarkdown": "죄송합니다. 제가 정말 기가막힌 착각을 하고 있었습니다...  \n먼저 이렇게 알려주셔서 정말 감사드립니다.  \n말씀하신대로 micro-f1 은 현재 데이터셋에서 precision recall f1-score 모두 같게 나옵니다.  \n이는 제가 방금 테스트해본 결과입니다. 캐글의 Mean F1 Score는 micro -f1 이며 메트릭 결과는 precision과 recall f1-score 동일합니다.   \n\n그리고 제가 말씀드린 클래스 사이즈가 다르다는 말은 잘못 말한 것입니다. 클래스 사이즈가 다르다가 아니라 데이터셋 사이즈가 다르다 입니다. 데이터 셋 자체가 너무 버라이어티 해서 데이터셋이 여러개의 사이즈를 가지고 있다 한다면 각 클래스별 confusion matrix는 독립적으로 만들어 질 것입니다.(하나의 데이터셋에서 만들어지지 않는다)  \n\n지금 주어진 데이터셋에 micro-f1 메트릭이 과연 적절한지 저도 의문스럽습니다.  \n하지만, 지금 Inclass로 저희가 설정할 수 있는 F1 메트릭은 micro버전을 제외하곤 커스텀으로 설정할 수 없게 되어있습니다. 다른 공개 컴페티션과는 다른점인것 같습니다....",
      "votes": null
    },
    {
      "id": "566009",
      "postDate": "07/01/2019 17:32:51",
      "content": "<p>답변 감사합니다. Inclass competition은 설정에 제약이 있나보군요.\n제 짧은 생각으로는 이미 다들 잘 하고 계시기도하고 지금 metric도 괜찮지 않나 싶네요\n덕분에 micro, macro score 개념도 배우고 precision, recall도 개념에 대해서도 좀 더 생각해 볼 수 있었습니다 ㅎㅎ</p>",
      "rawMarkdown": "답변 감사합니다. Inclass competition은 설정에 제약이 있나보군요.\n제 짧은 생각으로는 이미 다들 잘 하고 계시기도하고 지금 metric도 괜찮지 않나 싶네요\n덕분에 micro, macro score 개념도 배우고 precision, recall도 개념에 대해서도 좀 더 생각해 볼 수 있었습니다 ㅎㅎ",
      "votes": null
    },
    {
      "id": "566628",
      "postDate": "07/02/2019 11:38:52",
      "content": "<p>저도 많은 공부가 되었습니다. 감사합니다</p>",
      "rawMarkdown": "저도 많은 공부가 되었습니다. 감사합니다",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 565137,
      "author_name": "fulrose",
      "author_url": "",
      "post_date": "06/30/2019 13:44:22",
      "content": "<p>답변입니다.</p>\n\n<ul>\n<li><code>이렇게 하면 전체 false positive와 false negative 개수가 같아져서 precision = recall = f1-score가 되지 않나요?</code>  </li>\n</ul>\n\n<p>*이번 컴페티션의 데이터를 EDA를 해보시면 아시겠지만 각 클래스별 size가 동일하지 않습니다.  말씀하신대로 모든 클래스의 size가 균일하다면 micro-f1 값은 precision = recall = f1-score가 맞습니다.  하지만, class 사이즈가 다른 경우에 micro-f1을 포함 3개의 값은 모두 다를 수 있습니다. * 틀린 설명입니다 아래를 참고해주세요</p>\n\n<ul>\n<li><code>혹시 class에 존재하지 않는 값을 넣으면 positive에서 뺄 수 있나 확인해보려고 하나의 prediction 값을 0으로 바꿔 넣어보았는데, score에 변화가 없는 걸로 봐서는 false negative와 관계없이 false positive를 줄일 수 있는 방법이 없는 것 같습니다</code>    </li>\n</ul>\n\n<p>의 이유는 아마 값을 바꾼 '하나'의 prediction이 public score와는 상관없는 private id 값일 수 있습니다. (public : private = 34 : 66) 1개가 아닌 10개정도를 한번 시도해 보신다면 점수 변화가 있을 것으로 예상됩니다.   </p>\n\n<p>혹시 위에 내용에서도 틀린게 있을 수 있으니 무엇이든지 의견 부탁드립니다 😄 </p>",
      "votes": null,
      "replies": [
        {
          "id": 565336,
          "author_name": "cyr0930",
          "author_url": "",
          "post_date": "06/30/2019 19:32:17",
          "content": "<p>답변 감사합니다\n클래스 size가 동일하지 않으면 값이 다를 수도 있다는게 약간 이해가 안되는데요\n예를 들어 A, B, C 3개의 클래스가 있고 test set에 7개의 instance가 있다고 가정하겠습니다\n| idx | 1 | 2 | 3 | 4 | 5 | 6 | 7 |\n| --- | --- | --- | --- | --- | --- | --- | --- |\n| True | A | A | A | B | B | C | C |\n| Pred | A | A | C | B | C | C | B |</p>\n\n<p>위와 같이 예측이 되었다고 할 때 각 클래스 별 TP, TN, FP, FN을 찾아보면</p>\n\n<p>|  | TP | TN | FP | FN |\n| --- | --- | --- | --- | --- |\n| A| 1, 2 | 4, 5, 6, 7 |  | 3 |\n| B | 4 | 1, 2, 3, 6 | 7 | 5 |\n| C | 6 | 1, 2, 4 | 3, 5 | 7 |</p>\n\n<p>micro Precision = (TP_A + TP_B + TP_C) / (TP_A + TP_B + TP_C + FP_A + FP_B + FP_C)\nmicro Recall = (TP_A + TP_B + TP_C) / (TP_A + TP_B + TP_C + FN_A + FN_B + FN_C)</p>\n\n<p>micro Precision = (2 + 1 + 1) / (2 + 1 + 1 + 0 + 1 + 2) = 4/7\nmicro Recall = (2 + 1 + 1) / (2 + 1 + 1 + 1 + 1 + 1) = 4/7</p>\n\n<p>클래스가 달라도 이렇게 동일하게 되지 않나요?\n여기서 인스턴스를 하나 추가했을때 옳게 예측되면 해당 클래스 TP가 1증가하고 나머지 클래스의 TN이 1씩 증가하므로 Precision, Recall의 분자, 분모에 1씩 더해져 여전히 Pr, Rc이 같을 것이고\n추가된 인스턴스가 잘못 예측되면 True class의 FN이 1 증가하고 Pred class의 FP가 1 증가하고 나머지 클래스의 TN이 1씩 증가하므로 분모에만 1씩 더해져 여전히 Pr, Rc가 같으니 귀납적으로 항상 Pr, Rc가 같지 않을까요?</p>\n\n<p>제가 multi class에서의 micro precision, recall 개념을 잘못 이해하고 있는 것 일 수도 있는데 혹시 틀린게 있으면 알려주세요. 감사합니다 ㅎㅎ</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 565343,
          "author_name": "cyr0930",
          "author_url": "",
          "post_date": "06/30/2019 19:43:35",
          "content": "<p>그래서 제 생각에는\n예를들어 위 표에서 7번 instance가 Pr(A)=0.3, Pr(B)=0.4, Pr(C)=0.3 처럼 모호한 score에서부터 B로 예측되었고, 이런 예측을 뺀다면 B의 FP가 1 줄어들 것이고\nmicro Precision = 4/6, micro Recall = 4/7이 되어 Pr != Rc이 되지 않을까 합니다</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 565899,
          "author_name": "fulrose",
          "author_url": "",
          "post_date": "07/01/2019 14:20:44",
          "content": "<p>죄송합니다. 제가 정말 기가막힌 착각을 하고 있었습니다... <br>\n먼저 이렇게 알려주셔서 정말 감사드립니다. <br>\n말씀하신대로 micro-f1 은 현재 데이터셋에서 precision recall f1-score 모두 같게 나옵니다. <br>\n이는 제가 방금 테스트해본 결과입니다. 캐글의 Mean F1 Score는 micro -f1 이며 메트릭 결과는 precision과 recall f1-score 동일합니다.   </p>\n\n<p>그리고 제가 말씀드린 클래스 사이즈가 다르다는 말은 잘못 말한 것입니다. 클래스 사이즈가 다르다가 아니라 데이터셋 사이즈가 다르다 입니다. 데이터 셋 자체가 너무 버라이어티 해서 데이터셋이 여러개의 사이즈를 가지고 있다 한다면 각 클래스별 confusion matrix는 독립적으로 만들어 질 것입니다.(하나의 데이터셋에서 만들어지지 않는다)  </p>\n\n<p>지금 주어진 데이터셋에 micro-f1 메트릭이 과연 적절한지 저도 의문스럽습니다. <br>\n하지만, 지금 Inclass로 저희가 설정할 수 있는 F1 메트릭은 micro버전을 제외하곤 커스텀으로 설정할 수 없게 되어있습니다. 다른 공개 컴페티션과는 다른점인것 같습니다....  </p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 566009,
          "author_name": "cyr0930",
          "author_url": "",
          "post_date": "07/01/2019 17:32:51",
          "content": "<p>답변 감사합니다. Inclass competition은 설정에 제약이 있나보군요.\n제 짧은 생각으로는 이미 다들 잘 하고 계시기도하고 지금 metric도 괜찮지 않나 싶네요\n덕분에 micro, macro score 개념도 배우고 precision, recall도 개념에 대해서도 좀 더 생각해 볼 수 있었습니다 ㅎㅎ</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 566628,
          "author_name": "fulrose",
          "author_url": "",
          "post_date": "07/02/2019 11:38:52",
          "content": "<p>저도 많은 공부가 되었습니다. 감사합니다</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "563820": "이번 competition의 metric이 micro f1-score인 것으로 알고 있는데요\n제출을 할 때 보니 모든 test data에 대해 prediction을 해야 하더라고요\n이렇게 하면 전체 false positive와 false negative 개수가 같아져서\nprecision = recall = f1-score가 되지 않나요?\n\n혹시 class에 존재하지 않는 값을 넣으면 positive에서 뺄 수 있나 확인해보려고 하나의 prediction 값을 0으로 바꿔 넣어보았는데, score에 변화가 없는 걸로 봐서는 false negative와 관계없이 false positive를 줄일 수 있는 방법이 없는 것 같습니다\n\n제 생각에는 지금 metric은 f1-score이 아닌 recall로 측정되고 있는 것 같은데 한번 확인해주시면 좋겠습니다. 혹시 제가 잘못 생각하고 있는게 있으면 알려주세요.\n감사합니다 ㅎㅎ",
    "565137": "답변입니다.\n\n- `이렇게 하면 전체 false positive와 false negative 개수가 같아져서 precision = recall = f1-score가 되지 않나요?`  \n\n*이번 컴페티션의 데이터를 EDA를 해보시면 아시겠지만 각 클래스별 size가 동일하지 않습니다.  말씀하신대로 모든 클래스의 size가 균일하다면 micro-f1 값은 precision = recall = f1-score가 맞습니다.  하지만, class 사이즈가 다른 경우에 micro-f1을 포함 3개의 값은 모두 다를 수 있습니다. * 틀린 설명입니다 아래를 참고해주세요\n\n- `혹시 class에 존재하지 않는 값을 넣으면 positive에서 뺄 수 있나 확인해보려고 하나의 prediction 값을 0으로 바꿔 넣어보았는데, score에 변화가 없는 걸로 봐서는 false negative와 관계없이 false positive를 줄일 수 있는 방법이 없는 것 같습니다`    \n\n의 이유는 아마 값을 바꾼 '하나'의 prediction이 public score와는 상관없는 private id 값일 수 있습니다. (public : private = 34 : 66) 1개가 아닌 10개정도를 한번 시도해 보신다면 점수 변화가 있을 것으로 예상됩니다.   \n  \n혹시 위에 내용에서도 틀린게 있을 수 있으니 무엇이든지 의견 부탁드립니다 😄",
    "565336": "답변 감사합니다\n클래스 size가 동일하지 않으면 값이 다를 수도 있다는게 약간 이해가 안되는데요\n예를 들어 A, B, C 3개의 클래스가 있고 test set에 7개의 instance가 있다고 가정하겠습니다\n| idx | 1 | 2 | 3 | 4 | 5 | 6 | 7 |\n| --- | --- | --- | --- | --- | --- | --- | --- |\n| True | A | A | A | B | B | C | C |\n| Pred | A | A | C | B | C | C | B |\n\n위와 같이 예측이 되었다고 할 때 각 클래스 별 TP, TN, FP, FN을 찾아보면\n\n|  | TP | TN | FP | FN |\n| --- | --- | --- | --- | --- |\n| A| 1, 2 | 4, 5, 6, 7 |  | 3 |\n| B | 4 | 1, 2, 3, 6 | 7 | 5 |\n| C | 6 | 1, 2, 4 | 3, 5 | 7 |\n\nmicro Precision = (TP\\_A + TP\\_B + TP\\_C) / (TP\\_A + TP\\_B + TP\\_C + FP\\_A + FP\\_B + FP\\_C)\nmicro Recall = (TP\\_A + TP\\_B + TP\\_C) / (TP\\_A + TP\\_B + TP\\_C + FN\\_A + FN\\_B + FN\\_C)\n\nmicro Precision = (2 + 1 + 1) / (2 + 1 + 1 + 0 + 1 + 2) = 4/7\nmicro Recall = (2 + 1 + 1) / (2 + 1 + 1 + 1 + 1 + 1) = 4/7\n\n클래스가 달라도 이렇게 동일하게 되지 않나요?\n여기서 인스턴스를 하나 추가했을때 옳게 예측되면 해당 클래스 TP가 1증가하고 나머지 클래스의 TN이 1씩 증가하므로 Precision, Recall의 분자, 분모에 1씩 더해져 여전히 Pr, Rc이 같을 것이고\n추가된 인스턴스가 잘못 예측되면 True class의 FN이 1 증가하고 Pred class의 FP가 1 증가하고 나머지 클래스의 TN이 1씩 증가하므로 분모에만 1씩 더해져 여전히 Pr, Rc가 같으니 귀납적으로 항상 Pr, Rc가 같지 않을까요?\n\n제가 multi class에서의 micro precision, recall 개념을 잘못 이해하고 있는 것 일 수도 있는데 혹시 틀린게 있으면 알려주세요. 감사합니다 ㅎㅎ",
    "565343": "그래서 제 생각에는\n예를들어 위 표에서 7번 instance가 Pr(A)=0.3, Pr(B)=0.4, Pr(C)=0.3 처럼 모호한 score에서부터 B로 예측되었고, 이런 예측을 뺀다면 B의 FP가 1 줄어들 것이고\nmicro Precision = 4/6, micro Recall = 4/7이 되어 Pr != Rc이 되지 않을까 합니다",
    "565899": "죄송합니다. 제가 정말 기가막힌 착각을 하고 있었습니다...  \n먼저 이렇게 알려주셔서 정말 감사드립니다.  \n말씀하신대로 micro-f1 은 현재 데이터셋에서 precision recall f1-score 모두 같게 나옵니다.  \n이는 제가 방금 테스트해본 결과입니다. 캐글의 Mean F1 Score는 micro -f1 이며 메트릭 결과는 precision과 recall f1-score 동일합니다.   \n\n그리고 제가 말씀드린 클래스 사이즈가 다르다는 말은 잘못 말한 것입니다. 클래스 사이즈가 다르다가 아니라 데이터셋 사이즈가 다르다 입니다. 데이터 셋 자체가 너무 버라이어티 해서 데이터셋이 여러개의 사이즈를 가지고 있다 한다면 각 클래스별 confusion matrix는 독립적으로 만들어 질 것입니다.(하나의 데이터셋에서 만들어지지 않는다)  \n\n지금 주어진 데이터셋에 micro-f1 메트릭이 과연 적절한지 저도 의문스럽습니다.  \n하지만, 지금 Inclass로 저희가 설정할 수 있는 F1 메트릭은 micro버전을 제외하곤 커스텀으로 설정할 수 없게 되어있습니다. 다른 공개 컴페티션과는 다른점인것 같습니다....",
    "566009": "답변 감사합니다. Inclass competition은 설정에 제약이 있나보군요.\n제 짧은 생각으로는 이미 다들 잘 하고 계시기도하고 지금 metric도 괜찮지 않나 싶네요\n덕분에 micro, macro score 개념도 배우고 precision, recall도 개념에 대해서도 좀 더 생각해 볼 수 있었습니다 ㅎㅎ",
    "566628": "저도 많은 공부가 되었습니다. 감사합니다"
  },
  "source": "meta"
}