시리즈: GNN 실험일지 #7이전: 6편 | 목록 | 다음 없음2026년 5월 4일 | 개인 프로젝트Validation threshold calibration을 붙이면서, 지난 threshold sweep에서 느꼈던 찜찜함을 한 번 더 확인했다. 직전 글에서는 hardest seed의 test edge probability를 0.30부터 0.70까지 훑고 best threshold를 골랐다. 그 표는 오류 방향을 보는 진단표로는 꽤 쓸 만했다. 다만 test edge 위에서 threshold를 고르고 다시 같은 test edge로 좋아졌다고 말하는 건 아무래도 위험했다. 그래서 이번에는 작은 루프를 하나 더 붙였다. validation edge에서 threshold를 고르고, 그 값을 test edge에..
2026년 4월 29일 | 개발 공부Negative Sampling은 링크 예측에서 실제로 존재하는 간선(positive edge)만으로 학습하지 않고, 그래프에 연결되지 않은 노드 쌍을 일부 뽑아 negative edge로 같이 넣는 절차다. 링크 예측은 “어떤 두 노드 사이에 간선이 생길 가능성이 있는가”를 맞히는 문제인데, positive만 보면 모델은 구분을 배울 수 없다. 그래서 없는 간선을 함께 보여 주고, 이 둘을 가르는 점수를 학습시킨다.나는 처음에 negative sampling을 꽤 단순하게 봤다. 그래프에 없는 간선 중에서 아무거나 뽑으면 되는 줄 알았다. 그런데 최근 GNN 링크 예측 실험에서 false positive와 false negative를 edge 단위로 펼쳐 보니, 이 ..
시리즈: GNN 실험일지 #6이전: 5편 | 목록 | 다음: 7편2026년 4월 28일 | 개인 프로젝트Threshold sweep 리포트를 하나 더 붙이면서, 지난번 edge-case table에서 남겨 둔 찜찜함을 조금 더 선명하게 봤다. edge별 probability를 저장해 놓고 보니 0.5 하나로 자른 결과만 보는 게 생각보다 위험했다. 어떤 설정은 없는 edge를 너무 쉽게 붙이고, 어떤 설정은 있어야 할 positive edge를 계속 놓쳤다. AUC 표에서는 둘 다 비슷하게 나빠 보이는데, 실제 오류 비용은 완전히 다른 쪽으로 기울어 있었다.이번에 한 일은 거창한 모델 개선이 아니다. 기존 GNN structural variant edge-case table을 다시 읽고, 각 config..
시리즈: GNN 실험일지 #5이전: 4편 | 목록 | 다음: 6편2026년 4월 28일 | 개인 프로젝트structural variant의 평균 AUC 표를 몇 번 다시 보다가, 결국 숫자를 한 단계 더 아래로 내렸다. seed별 ranking까지는 이미 봤지만, 내가 정말 궁금했던 건 더 작은 단위였다. hardest seed 안에서 어떤 positive edge를 놓쳤고, 어떤 negative edge를 잘못 붙였는가. 이번 GNN 반복은 그 질문을 확인하려고 edge-level case table을 하나 추가한 작업이다.앞선 글에서는 sample_collab_graph와 bipartite_bridge_graph를 같이 놓고, dataset별 hardest seed를 따로 골랐다. 그때는 reduce..
시리즈: GNN 실험일지 #4이전: 3편 | 목록 | 다음: 5편2026년 4월 27일 | 개발 일기structural variant 비교를 평균 표 하나로만 읽으면, 작은 그래프에서 제일 중요한 실패 장면이 뒤로 밀린다. 직전 반복에서는 sample_collab과 bipartite_bridge 두 데이터셋을 묶어서 mean test AUC와 hardest split AUC를 같이 봤다. 그 자체로도 도움이 됐지만, 다시 보니 더 직접적으로 궁금한 질문이 남았다. 데이터셋마다 가장 어려웠던 seed를 먼저 고른 뒤, 그 seed 안에서 다섯 개 입력판을 다시 줄 세우면 어떤 설정이 실제 바닥을 지키는가.이번 반복은 새 encoder를 붙인 작업이 아니다. 이미 만들어 둔 multidataset_struc..
시리즈: GNN 실험일지 #3이전: 2편 | 목록 | 다음: 4편2026년 4월 25일 | 개발 일기sample_collab 하나로 읽던 structural variant 역할을 bipartite graph에 다시 올려 보니, 직전 글에서 제일 또렷해 보였던 해석이 꽤 빠르게 흔들렸다. sample_collab에서는 reduced+degree가 seed 다섯 개 전부에서 test AUC 0.75로 맞춰지며 가장 평평한 판처럼 보였고, reduced+closed_triplets는 mean test AUC를 0.80까지 끌어올렸다. 그런데 삼각형이 아예 없는 12노드 bipartite 그래프에 같은 비교판을 그대로 얹으니, 평균이 가장 잘 버티는 설정과 hardest split 바닥이 덜 무너지는 설정이 다..
2026년 4월 23일 | 개발 공부GraphSAGE는 Graph Sample and Aggregate의 약자고, 주변 이웃을 샘플링하고 집계해서 노드 표현을 만드는 그래프 신경망(GNN) 계열 모델이다. 최근 GNN 실험에서 이 모델의 입력판을 몇 번 바꿔 보다가, 나는 feature importance를 단독 랭킹처럼 읽는 습관이 생각보다 자주 사람을 헷갈리게 만든다는 걸 다시 느꼈다. 같은 degree 하나가 어떤 판에서는 제거 후보처럼 보였고, 다른 판에서는 오히려 split을 덜 흔들리게 만드는 축으로 보였기 때문이다.예전의 나는 importance 표를 보면 일단 1위, 2위부터 봤다. 어떤 feature가 위에 있으면 "이건 남겨야 하는 신호"로 읽고, 아래로 밀리면 제거 후보로 적었다. 그..
시리즈: GNN 실험일지 #2이전: 1편 | 목록 | 다음: 3편2026년 4월 20일 | 개발 일기14차원 hybrid 입력에서 structural feature 5개를 하나씩 빼 보니, degree를 뺀 설정이 mean test AUC 0.85, hardest split AUC 0.75로 가장 안정적이었다. 직전 글에서는 hybrid input 자체가 propagation-only보다 바닥을 덜 깊게 만든다는 단서까지만 봤는데, 이번에는 그 안에서 어떤 structural 축이 실제로 stability를 만들고 어떤 축은 propagation residual과 겹쳐 노이즈가 되는지를 더 잘게 쪼개 봤다.이번 반복에서 한 일은 단순하다. structural 5차원 degree, avg_neighbor_..
2026년 4월 16일 | 개발 일기14차원 hybrid node input을 붙인 GraphSAGE는 sample_collab 그래프에서 mean test AUC 0.7444가 나왔다. propagation-only GraphSAGE의 0.7889는 넘지 못했지만, structural-only의 0.6167보다는 분명히 올라왔고, hardest split이던 seed 13에서는 propagation-only보다 더 덜 무너졌다. 숫자 하나만 보면 애매할 수 있는데, 내가 오늘 얻은 건 단순한 신기록보다 어떤 입력판이 흔들릴 때 덜 크게 흔들리는지에 대한 감각에 더 가까웠다.직전 반복에서 propagation residual을 node input으로 넣었을 때는 "GraphSAGE가 약한 이유가 enco..