머신러닝이란 단어의 의미대로 기계학습입니다. 인공지능의 한 분야로, 컴퓨터가 데이터를 학습하여 스스로 학습하고 예측합니다. 실제로 데이터로부터 학습하는 모델을 구축하는 프로세스까지를 머신러닝이라고 합니다.
ML모델은, 데이터에서 패턴을 학습하는 알고리즘입니다. 현대사회의 빅데이터들의 데이터는 엄청나게 많은 데이터들이 존재하는데, 그 중 예측하고자 하는 결과값을 가장 잘 예측할 수 있는 알고리즘을 최적의 ML 모델로 선정하여 구축하여야 합니다.
ML프로젝트는 "기계학습 모델 만들기"와 같은 의미로 사용되지 않습니다. 실제로 ML프로젝트는 문제정의, 데이터 수집 및 가공, ML모델 구축, 검증, 모니터링등 모든 과정들을 담은것이 실제 ML프로젝트입니다.
MLOps (ML Operations)

위의 사진과 같이 ML모델이 실제 프로덕션까지 도달하는데 도움을 주는 방법론입니다. 쉽게 생각하면, ML모델의 지속적인 배포와 자동화를 위한 실질적인 파이프라인이라고 생각하면 될 것 같습니다.
ML 생애주기(ML Lifecycle)
1단계 : 문제정의 - ML로 해결가능한 문제를 정의하고 데이터를 확보할 수 있는 방안을 마련합니다. 문제정의 단계가 포함되는데, ML로 해결할 수 있는 문제를 정의하고 가설을 설정합니다. 이때, 이윤을 창출할 수 있는 문제가 정의된다면, ML프로젝트로 확장이 가능합니다.
2단계 : 데이터 준비 - 데이터를 실제로 수집하고 데이터의 특성등을 알아보는 탐색과정입니다. 데이터를 수집하고, 데이터셋의 공유 및 재사용을 위한 실질적인 버전관리가 굉장히 중요한 단계입니다. 데이터셋은 문제정의에 따라서 다양한 방법으로 가공되고, 추가적으로 수집되는 데이터셋들에 대한 별도의 관리가 굉장히 중요합니다.
데이터 탐색과정에서는 다양한 툴을 활용하여 시각화를 진행하고 있습니다. 저도 아직 시각화나 EDA과정이 오히려 머신러닝 설계보다 많이 미흡하다고 생각해 배우고 싶다는 생각을 많이 하고있습니다.
태블로, 파워BI등이 많이 활용되고 있는데, 기회가 난다면 시각화 툴에 대해서도 글 남기겠습니다.
3단계 : 모델 설계 - 실제 모델을 설계하고, 수집한 데이터를 바탕으로 모델을 학습하고 성능을 평가합니다. 데이터를 가공하는 단계인데, 이후 머신러닝을 조금 더 집중적으로 다루게 되면 글을 작성하겠지만 모델의 성능을 좌우할만큼 굉장히 중요한 단계입니다. 지도학습(Supervised Learning)을 진행하게되면 라벨링된 데이터가 필요한데, 데이터 라벨링이 대표적인 데이터 가공의 예시입니다.
모델 학습을 위한 입력조건에는 기본적으로, 입력 데이터와 학습 알고리즘, 그리고 하이퍼 파라미터가 필수적입니다. 학습 알고리즘이 실질적으로 패턴을 발견해주고, 그 알고리즘의 속성을 파라미터(Parameter)라고 부르는데, 최적의 성능을 낼 수 있는 파라미터를 하이퍼파라미터(Hyperparameter)라 부릅니다.
실험을 통해 최적의 모델을 찾아가는 과정에서 하이퍼 파라미터를 찾을 수 있다면 가장 좋겠지만, 파라미터의 경우의 수는 데이터셋의 수 * 알고리즘의 수 * 파라미터의 수
로 너무 많아 실질적인 실험을 어렵다고 생각됩니다.
일반적으로 같은 알고리즘을 활용했거나, 비슷한 도메인에서 진행된 프로젝트나 연구를 레퍼런스하여 활용하는게 가장 이상적이라고 생각됩니다.
4단계 : 배포/서빙 - 모델을 통한 서비스 운영을 실질적으로 진행합니다. 가장 좋은 모델을 선택했다면, 검증 과정을 거친 후에 패키징하여 서비스로 배포합니다.
배포툴은 Jenkins, Docker, Kubernetes 등이 있습니다. 제가 작성하고 있는 로컬에서 LLM을 구현하는 방법 중 하나에 Docker를 사용하고 있어, Docker에 대한 지식이 있으면 공유하도록 하겠습니다.
5단계 : 모니터링 - 지속적인 서비스 모니터링을 통해 서비스의 품질을 개선합니다. 가장 종요하게 생각되는 점은 데이터 드리프트(Data Drift) 입니다. 데이터의 패턴 특성이 시간이 지나면서 변해갈 수 있기때문에 모니터링 과정은 반드시 필수적이고, 이로 모델의 재 학습 시점을 판단해야 합니다.
6단계 : 모델을 재 학습하고 재 배포합니다. 서비스 제공 과정에서 생긴 데이터들이나, 새롭게 나타나는 데이터에 더 적합한 알고리즘으로 모델을 재설계한뒤 다시 배포합니다.
데이터 엔지니어(Engineer) : 데이터 수집을 위한 파이프라인을 구축하는 직군입니다. 조직의 데이터를 위한 인프라와 전체 업무의 흐름을 관리합니다. 회사의 데이터 수집, 데이터 파이프라인 구축, 데이터 저장 및 전송 방법 관리등 데이터 중심의 인프라와 파이프라인을 구현합니다.
데이터 과학자(Scientist): ML모델을 구축합니다. 데이터 수집, 해석, 처리에서부터 통계적/탐색적인 분석을 수행하는 기술자입니다. 일반적으로 조직의 ML모델을 가장 먼저 구축하고, 점진적으로 개선해 나아갑니다.
데이터 분석가(Analyst) : 데이터 분석을 통해 실질적인 인사이트를 도출해 조직에 데이터 시각화의 결과를 공유합니다. 쉽게 말하자면, 데이터를 해석해 유의미한 결과를 찾아냅니다.
연구 과학자 : ML알고리즘을 연구하고 개발합니다. ML에 대한 접근 방식을 프로토타이핑하고 평가합니다.
ML 엔지니어 : 위의 데이터 과학자가 개발한 모델을 가져와 해당 모델의 학습/배포와 관련된 인프라와 운영을 관리합니다.
SW(Software) 개발자 : 실제 서비스를 구현하면서 UI/UX등 최종 사용자가 ML모델에 쉽게 접근할 수 있는 방식을 구축해냅니다. 웹 혹은 앱 기반의 사용자 친화적으로 설계할 수 있도록 하여야 합니다.
큰 틀은 아래의 사진과 같습니다.

다음 글 부터는, 실제로 머신러닝에 자주 활용되는 패키지부터 예시 코드까지 같이 작성하도록 하겠습니다.