SK네트웍스 Family AI 캠프 1기 7주차 회고
SK Networks AI Camp
Weekly 회고 - 7주차
포스트를 읽기 전에..
이 포스트는 SK네트웍스 Family AI 캠프를 다니면서 느낀 개인적인 생각을 정리한 포스트입니다.
배운 내용이나 스킬셋에 대한 설명은 별도로 작성하지 않았기 때문에, 그에 대한 정보는 다른 포스트를 참고해주세요!
Liked
지난 주는 회고도 못쓸 정도로 바빴는데 이번 주는 지난 주보다는 여유가 생겼습니다!
객체지향적으로 프로그래밍을 한다거나, Vue를 이용해서 프론트엔드 개발을 진행한다던가 정말 배울 것이 많은 강의입니다.
저는 새롭게 무언가 배우는 것을 좋아하다보니 다소 바쁘더라도 이렇게 진행되는 것이 좋다고 생각합니다.
그리고 지난 주에 이어서 계속 팀 과제가 이어지고 있습니다. Git을 적극적으로 이용한 팀 개발이 처음이라 조금 어렵고 충돌도 잦은 것 같은데 지금 고생하는 게 미래를 위해선 좋다고 생각합니다!
그리고 FastAPI도 사용해보고 있습니다. 처음 다뤄보는 것이라서 아직 납득이 안되는 부분도 있지만 이 또한 새로운 지식이기 때문에 빨리 더 깊이 배워보고 싶습니다!:star_struct:
사실 이것들보다 좋은 점이 더 많지만 아직 제가 완벽히 이해한 부분이 아니라서 뭐가 어떻게 좋고 왜 좋은지 설명하기가 어려워서 다음에 더 이해가 된 다음에 적어보도록 하겠습니다.
Learned
앞서 말씀드린 것처럼 배운 내용이 매우 많지만 이번에는 그 중 두 가지만 자세히 다뤄보고자 합니다.
첫 번째는 DDD 관점에서의 Aggregate이고, 두 번째는 SMOTE 입니다.
보다 자세한 설명은 아래에 기록하도록 하겠습니다!
—
Aggregate
Aggregate(애그리거트)란 객체들을 모아 하나의 단위로 취급하는 개념으로,
OOP(객체지향 프로그래밍, Object Oriented Programming)에서,
애그리거트는 객체 간의 관계를 정의하는 방법 중 하나로, 논리적으로 관련된 객체들을 그룹화하여 하나의 묶음으로 다룬다.
쉽게 말해, Aggregate란 여러 개의 객체를 묶어 하나의 큰 객체로 다루는 것!
Root Entity의 역할과 책임
Aggregate 내부의 모든 객체들은 Root Entity를 중심으로 관리된다!
- 주요 책임
- Aggregate 내부의 모든 객체들을 관리하고 제어한다.
- Aggregate Root Entity의 불변성을 보장한다.
- Aggregate Root Entity와 다른 객체 간의 관계를 관리한다.
- Aggregate Root Entity를 통해 Aggregate 전체를 제어한다.
Aggregate의 불변성 유지와 캡슐화
Aggregate는 불변성을 유지하면서 캡슐화를 지켜야한다!
- 불변성 유지
- Aggregate의 상태는 Root Entity를 통해 변경되어야 한다.
- 한번 생성된 Aggregate는 그 상태가 변하지 않는다.
- 캡슐화
- Aggregate 내부의 객체들이 외부에서 직접 접근할 수 없도록 보호하는 것이다.
- Aggregate 내부의 객체들은 Aggregate Root Entity를 통해서만 접근할 수 있어야 한다.
이를 통해 Aggregate는 내부의 객체들이 외부의 영향을 받지 않도록 보호하면서 일관성을 유지할 수 있다.
또한, 객체 간 결합도를 낮추어 유지 보수성과 확장성을 높일 수 있다!
Aggregate의 유지보수성과 확장성
-
유지보수성
- Aggregate는 관련된 객체들의 집합을 하나의 논리적인 단위로 묶어서 표현한다.
- 이를 통해서 객체간의 의존성을 낮추고, 객체 간의 복잡한 관계를 단순화할 수 있다.
- Aggregate 내부에서 발생하는 변경 사항은 외부에 영향을 미치지 않고 그 반대도 마찬가지이기 때문에 유지보수가 용이하다.
-
확장성
- Aggregate는 불변성을 유지하여 외부에서 변경되지 않도록 캡슐화가 되어있다.
- Aggregate의 불변성이 보장되면 시스템이 동시에 여러 스레드에서 사용되더라도 객체의 상태가 일관성을 유지할 수 있다.
- 그로 인해 시스템의 확장성이 향상될 수 있다.
SMOTE (Synthetic Minority Over-sampling TEch)
SMOTE는 대표적인 Over Sampling 기법 중 하나이므로 Over Sampling과 Under Sampling의 개념을 먼저 알아보자!
Under-Sampling & Over-Sampling
-
Under-Sampling
언더 샘플링은 불균형한 데이터 셋에서 높은 비율을 차지하는 클래스의 데이터 수를 줄임으로써 클래스의 불균형을 해소하는 개념
- 장점
- 데이터 불균형 해소 가능
- 단점
- 분류에 중요한 데이터를 학습 데이터에서 배제하기 때문에 성능 저하를 야기할 수 있음
- 장점
-
Over-Sampling
오버 샘플링은 언더 샘플링과 반대로, 데이터셋에서 낮은 비율을 차지하는 클래스의 데이터 수를 늘림으로써 불균형을 해소하는 개념
- 장점
- 데이터 수를 감소시켜 중요한 데이터를 잃을 수 있다는 언더 샘플링의 단점을 보완 가능
- 단점
- 존재하지 않는 데이터의 수를 늘리는 과정에서 과적합(Overfitting)을 야기할 수 있음
- 장점
SMOTE란?
SMOTE는 낮은 비율로 존재하는 클래스의 데이터를 k-NN(k-Nearest Neighbor)알고리즘을 활용하여 새롭게 생성하는 방법이다
단순 무작위 추출을 통해 데이터 수를 늘리는 오버 샘플링 기법과 다르게, 알고리즘을 기반으로 데이터를 생성하여 과적합 발생 가능성을 줄일 수 있다!
SMOTE 동작 방식
임의의 소수 클래스 데이터 사이에 새로운 데이터를 생성하는 방법
SMOTE는 데이터 생성을 위해 원본 데이터에 k-NN 알고리즘을 활용하여 같은 클래스의 데이터를 임의로 증식한다.
- 소수 클래스의 데이터 중 특정 벡터(샘플)와 가장 가까운 k개의 이웃 벡터를 선정
- 기준 벡터와 선정한 벡터 사이를 선분으로 이음
- 선분 위의 임의의 점이 새로운 벡터(혹은 이 중 임의의 하나)
결 론
- 불균형 데이터셋에서 소수 클래스의 데이터를 증강하여 데이터 균형을 맞춤
- 분류 문제에서 소수의 집합은 데이터가 부족함
- 이런 소수 집합의 성능을 높이고자 할 때 사용하면 효율적
사용 조건
- 데이터의 양이 작아야 한다
- 데이터가 불균형적이어야 한다(imbalanced)
Lacked
지난 주와 마찬가지로 제일 부족한 것은 개인 시간인 것 같습니다. 개인 시간이라는 게 놀고 뒹굴거리고 하는 시간이 아니라, 개인적인 공부를 할 시간이 부족하다는 의미입니다. 원래 예전에 말했던 것처럼 알고리즘 대회를 위한 공부를 더 진행하려고 했는데 그 정도로 시간 여유가 없어서 우선 순위를 뒤로 미루었습니다.
하지만 이 캠프에 참여해서 강의를 듣고 과제를 진행하는 것만으로도 배워가는 것이 많기 때문에 알고리즘 공부를 뒤로 미룬 것이 전혀 후회되지 않습니다.
Longed for
항상 생각하는 것인데, 앞으로 강의도 지금처럼 바쁘지만 배울 것이 많았으면 좋겠다는 바람이 있습니다. 물론 힘들고 잠도 길게 못자지만 그래도 한번만 참여할 수 있는 캠프라고 하면 그만큼 고생하면서 배우고 공부해봐야 한다고 생각합니다.
물론 그 과정을 따라가기 위해선 제 스스로 많이 공부하고 노력하고 체력 관리에 힘 써야할 것으로 생각됩니다.
캠프에 참여한 다른 분들도 저만큼 힘들거나 저보다 더 힘들겠지만 이 악물고 버티고 공부하면서 성공적인 취업까지 힘내봅시다!!
다음 주 강의와 과제도 지금처럼 열심히 할 수 있는 사람이 되도록 노력하겠습니다.