반응형

ChatGPT의 가능성

 

ChatGPT에서 발표한 GPTs로 이제 프로그래머가 아닌 일반 사람들이 자기만의 AI를 활용할 수 있는 세상이 열리게 되었다.

상상해 보자.

친구와 대화하는 것과 마찬가지로 컴퓨터와 빠르게 소통할 수 있는 세상을!
그런 세상이 어떻게 보일까?
일상 생활 속에서 어떤 응용 프로그램을 만들어 사용할까?

 

이러한 인공 지능 모델의 영향은 단순한 음성 어시스턴트를 넘어서며, OpenAI의 모델 덕분에 개발자들은 이제 한때 과학 소설로만 여겨졌던 방식으로 우리의 필요를 이해하는 응용 프로그램을 만들 수 있다.

ChatGPT란?

 

그런데 GPT-4 ChatGPT는 무엇일까?


먼저 이러한 인공지능 모델의 기초, 기원 및 주요 기능을 알아보도록 하자.
이러한 모델의 기본을 이해함으로써 다음 세대의 LLM 기반 응용 프로그램을 만드는 길에 한 발자국 나아갈 수 있을 것이기 때문이다.

 

GPT-4 ChatGPT의 개발을 형성한 기본적인 구성 요소를 제시한다.
우리의 목표는 언어 모델과 NLP의 포괄적인 이해, 트랜스포머 아키텍처의 역할, 그리고 GPT 모델 내의 토큰화 및 예측과정을 제공하는 것이다.

 

LLM(대형 언어 모델)로서, GPT-4 ChatGPT는 기계 학습(ML)과 인공 지능(AI)의 하위 분야인 자연어 처리(NLP) 분야에서 얻은 최신 유형의 모델이다.


GPT-4
ChatGPT에 대해 알아보기 전에 NLP와 그와 관련된 분야를 살펴보는 것이 중요합니다.

AI에 대한 다양한 정의가 있지만, 대략적으로 합의되는 정의 중 하나는 AI가 일반적으로 인간 지능이 필요한 작업을 수행할 수 있는 컴퓨터 시스템의 개발이라고 말한다.


이 정의에 따라 많은 알고리즘이 AI 범주에 속한다.
예를 들어 GPS 애플리케이션에서의 교통 예측 작업이나 전략적 비디오 게임에서 사용되는 규칙 기반 시스템을 생각해보자.
이러한 예에서 기계는 외부에서 보면 이러한 작업을 수행하기 위해 지능이 필요한 것처럼 보인다.

ML AI의 하위 집합이다.
ML
에서는 AI 시스템에서 사용되는 의사 결정 규칙을 직접 구현하지 않는다.
대신 시스템이 예제에서 스스로 학습할 수 있게 하는 알고리즘을 개발하려고 한다.
ML
연구가 시작된 1950년대 이후로 많은 ML 알고리즘이 과학 문헌에서 제안되었다다.

이 중에서도 딥러닝 알고리즘이 주목을 받았다.
딥러닝은 뇌의 구조에서 영감을 받은 알고리즘에 중점을 둔 ML의 한 분야다.
이러한 알고리즘을 인공신경망이라고 한다.
이들은 매우 큰 양의 데이터를 처리하고 이미지 및 음성 인식, 그리고 NLP와 같은 작업에서 매우 우수한 성능을 발휘할 수 있다.
GPT-4
ChatGPT는 트랜스포머(변환자)라고 불리는 특정 유형의 딥러닝 알고리즘을 기반으로 한다.
트랜스포머(변환자)는 읽기 기계와 같이 작동한다.
문장이나 텍스트 블록의 다른 부분에 주의를 기울여 그 문맥을 이해하고 일관된 응답을 생성한다.
또한 문장 내 단어의 순서와 그 문맥을 이해할 수 있다.
이로 인해 언어 번역, 질문 응답, 텍스트 생성과 같은 작업에서 높은 효율을 발휘한다.
위 그림은 이러한 용어들 간의 관계를 나타나고 있다.

 

NLP는 컴퓨터가 자연스러운 인간 언어를 처리, 해석 및 생성할 수 있도록 하는 AI의 하위 분야다.
현대적인 NLP 솔루션은 기계 학습 알고리즘을 기반으로 한다.
NLP
의 목표는 컴퓨터가 자연어 텍스트를 처리할 수 있게 하는 것이다.
이 목표는 다음과 같은 다양한 작업을 포함한다:

 

1. 텍스트 분류

입력 텍스트를 미리 정의된 그룹으로 분류한다.
이에는 감정 분석 및 주제 분류와 같은 작업이 포함된다.
기업은 감정 분석을 사용하여 고객이 서비스에 대한 의견을 이해할 수 있다.
이메일 필터링은 "개인", "소셜", "프로모션" "스팸"과 같은 카테고리로 이메일을 분류하는 주제 분류의 예다.

 

2. 자동 번역

텍스트를 한 언어에서 다른 언어로 자동 번역한다.
이것은 한 프로그래밍 언어에서 다른 언어로 코드를 번역하는 작업과 같이 다양한 영역을 포함할 수 있다.
예를 들어, Python에서 C++로 코드를 번역하는 것도 포함된다.

 

3. 질문 응답

주어진 텍스트를 기반으로 질문에 답한다.
예를 들어, 온라인 고객 서비스 포털은 제품에 관한 FAQ를 대답하기 위해 NLP 모델을 사용할 수 있으며, 교육용 소프트웨어는 학습 주제에 관한 학생의 질문에 답변하기 위해 NLP를 사용할 수 있다.

 

4. 텍스트 생성

주어진 입력 텍스트(프롬프트라고도 함)를 기반으로 일관되고 관련성 있는 출력 텍스트를 생성한다.

 

앞서 언급한 대로 LLMs는 텍스트 생성 작업 등 다양한 작업을 해결하려는 ML 모델이다.
LLMs
는 컴퓨터가 인간 언어를 처리, 해석 및 생성할 수 있게 하며, 보다 효과적인 인간-기계 커뮤니케이션을 가능하게 한다.
이를 위해 LLMs는 방대한 양의 텍스트 데이터를 분석하거나 학습하며 문장 내 단어 간의 패턴과 관계를 학습한다.
이러한 학습 프로세스를 수행하기 위해 다양한 데이터 원본을 사용할 수 있다.
이 데이터에는 Wikipedia, Reddit, 수천 권의 책의 아카이브 또는 인터넷 자체의 아카이브에서 가져온 텍스트가 포함될 수 있다.
주어진 입력 텍스트를 기반으로, 이러한 학습 프로세스를 통해 LLMs는 다음에 나올 단어에 대한 가장 가능성 있는 예측을 할 수 있으며 이를 통해 입력 텍스트에 의미 있는 응답을 생성할 수 있다.
최근 몇 달 동안 게시된 현대적인 언어 모델은 이제 텍스트 분류, 기계 번역, 질문 응답 및 기타 많은 NLP 작업과 같은 대부분의 NLP 작업을 직접 수행할 수 있는 크기와 학습된 텍스트 양이 매우 크다.


GPT-4
ChatGPT 모델은 텍스트 생성 작업에서 뛰어난 현대적인 LLMs이.

 

파이썬으로 OpenAI API의 'Hello World' 예제 실행

 

OpenAI GPT-4 ChatGPT를 서비스로 제공한다.
이것은 사용자가 모델의 코드에 직접 액세스하거나 자체 서버에서 모델을 실행할 수 없다는 것을 의미한다.
그러나 OpenAI는 모델의 배포 및 실행을 관리하고 사용자는 계정과 비밀 키가 있다면 이러한 모델을 호출할 수 있다.

먼저 OpenAI 웹 페이지에 로그인되어 있는지 확인하자.

 

API 키가 준비되었으면, OpenAI API를 사용한 첫 번째 "Hello World" 프로그램을 작성할 시간이다.

 

다음은 OpenAI Python 라이브러리를 사용한 첫 번째 코드 라인을 보여준다.
OpenAI
가 어떻게 서비스를 제공하는지 이해하기 위해 클래식한 "Hello World" 예제를 시작하자.

 

먼저 pip를 사용하여 Python 라이브러리를 설치한다:

!pip install openai

 

다음으로 Python에서 OpenAI API에 액세스하자:

import openai
# openai ChatCompletion 엔드포인트 호출
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "Hello World!"}],
)
# 응답 추출
print(response["choices"][0]["message"]["content"])

 

다음과 같은 출력이 표시다:

```

안녕하세요! 오늘 어떻게 도와드릴까요?

Hello there! How may I assist you today?

OpenAI Python 라이브러리를 사용하여 첫 번째 프로그램을 작성했다.

 

OpenAI API 키 설정


그럼 이 라이브러리를 사용하는 방법에 대해 조금 더 자세한 내용을 살펴보자.

 

관찰하신 대로 코드 스니펫에서 OpenAI API 키를 명시적으로 언급하지 않았다.
이것은 OpenAI 라이브러리가 자동으로 OPENAI_API_KEY라는 환경 변수를 찾도록 설계되어 있기 때문이다.
또는 다음 코드를 사용하여 API 키가 포함된 파일을 가리킬 수 있다:

# 파일에서 API 키 로드
openai.api_key_path = <경로>,

또는 다음 방법을 사용하여 코드 내에서 API 키를 수동으로 설정할 수 있다:

# API 키 로드
openai.api_key = os.getenv("OPENAI_API_KEY")

권장 사항은 환경 변수에 대한 널리 사용되는 규칙을 따르는 것이다.
, .gitignore 파일에서 소스 제어에서 제외된 .env 파일에 키를 저장하는 것이다.
그런 다음 Python에서 load_dotenv 함수를 실행하여 환경 변수를 로드하고 openai 라이브러리를 가져올 수 있다:

from dotenv import load_dotenv
load_dotenv()
import openai

중요한 점은 .env 파일을 로드한 후에 openai import 선언을 가져와야 하며, 그렇지 않으면 OpenAI 설정이 올바르게 적용되지 않을 수 있다.

 

파이썬 코딩을 통해 프롬프트에 접근해 보면, ChatGPT와의 프롬프트를 파악하는데 도움이 될 수 있다고 본다. 
하지만, 매우 빠르게 변화하고 있는 LLM모델이기 때문에, openai의 Playground에서 본인만의 AI와 만나보는 것이 더 나을 것이라 생각한다. 

다음에는 Playground를 간단히 살펴보도록 할 생각이다.

https://platform.openai.com/playground

 

OpenAI Platform

Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform.

platform.openai.com

 

참고문헌) Developing Apps with GPT-4 and ChatGPT

 

Developing Apps with Gpt-4 and Chatgpt | Caelen, Olivier - 교보문고

Developing Apps with Gpt-4 and Chatgpt |

product.kyobobook.co.kr

 

반응형
반응형

오늘 ChatGPT의 'OpenAI DevDay'가 있었고, 향후 많은 사람들이 유용하게 사용할 수 있는 기능들이 추가되는 것을 확인한 하루였다. 
이제 정말 나만의 비서를 쓸 수 있는 시대가 도래하고 있다는 것을 알리는 자리가 아니었나 싶다.

가족들에게도 각자 상황에 맞는 비서를 셋팅할 수 있다고 하니, 좀 더 발빠르게 대비할 필요가 있지 않을까 싶다.

 

다음 내용은 오늘 OpenAI 홈페이지에 올라온 글이다(구글 번역).


우리는 특정 목적을 위해 생성할 수 있는 ChatGPT의 사용자 지정 버전('GPTs'라 함)을 출시하고 있습니다. 
GPTs는 누구나 일상 생활, 특정 작업, 직장 또는 집에서 더 도움이 되도록 맞춤형 버전의 ChatGPT를 만들고 해당 창작물을 다른 사람들과 공유할 수 있는 새로운 방법입니다. 
예를 들어, GPTs는 보드 게임의 규칙을 배우거나, 자녀에게 수학을 가르치거나, 스티커를 디자인하는 데 도움이 될 수 있습니다 .

누구나 쉽게 자신만의 GPT를 구축할 수 있습니다. 
코딩이 필요하지 않습니다. 
회사 내부용으로나 모든 사람을 위해 직접 만들 수도 있습니다. 
대화를 시작하고, 지침과 추가 지식을 제공하고, 웹 검색, 이미지 만들기, 데이터 분석 등 할 수 있는 작업을 선택하는 것만큼 쉽습니다. 

ChatGPT Plus 및 Enterprise 사용자는 오늘부터 Canva 및 Zapier AI 작업을 포함한 예제 GPT를 사용해 볼 수 있습니다 . 우리는 곧 더 많은 사용자에게 GPT를 제공할 계획입니다.


새로운 모델 및 개발자 제품에 대한 OpenAI DevDay 발표에 대해 자세히 알아보세요 .

GPTs는 당신의 특정 목적에 맞게 ChatGPT를 맞춤 설정할 수 있습니다.
ChatGPT를 출시한 이후 사람들은 ChatGPT를 특정 사용 방식에 맞게 사용자 정의할 수 있는 방법을 요청해 왔습니다. 

우리는 몇 가지 기본 설정을 지정할 수 있는 맞춤형 지침을 7월에 출시했지만 더 많은 제어 기능에 대한 요청이 계속해서 접수되었습니다. 

많은 고급 사용자는 신중하게 제작된 프롬프트 및 지침 세트 목록을 유지 관리하고 이를 수동으로 ChatGPT에 복사합니다. 

이제 GPT가 이 모든 것을 대신해 드립니다.

최고의 GPTs는 커뮤니티에 의해 발명될 것입니다
우리는 가장 놀라운 GPTs가 커뮤니티의 빌더로부터 나올 것이라고 믿습니다. 

교육자, 코치 또는 유용한 도구를 만드는 것을 좋아하는 사람이든 관계없이 도구를 만들고 전문 지식을 공유하기 위해 코딩을 알 필요는 없습니다.

GPT Store는 이번 달 말에 출시될 예정입니다
오늘부터 GPTs를 생성하고 공개적으로 공유할 수 있습니다. 

이번 달 말에는 검증된 제작자의 창작물을 선보이는 GPT 스토어를 출시할 예정입니다. 

매장에 들어가면 GPTs를 검색할 수 있으며 순위표에 오를 수 있습니다. 

또한 생산성, 교육, '재미를 위한' 카테고리에서 가장 유용하고 즐거운 GPTs를 집중 조명할 것입니다. 

앞으로 몇 달 안에 GPT를 사용하는 사람 수에 따라 수익을 얻을 수도 있습니다.

반응형


우리는 개인 정보 보호와 안전을 염두에 두고 GPTs를 구축했습니다
언제나 그렇듯이 ChatGPT를 사용하여 데이터를 제어할 수 있습니다. 

GPTs와의 채팅은 빌더와 공유되지 않습니다. 

GPT가 타사 API를 사용하는 경우 해당 API로 데이터를 전송할 수 있는지 여부를 선택합니다. 

빌더가 작업이나 지식으로 자신의 GPT를 맞춤설정할 때 빌더는 해당 GPT와의 사용자 채팅을 사용하여 모델을 개선하고 교육할 수 있는지 선택할 수 있습니다. 

이러한 선택은 전체 계정을 모델 교육에서 제외하는 옵션을 포함하여 사용자가 보유한  기존 개인 정보 보호 제어를 기반으로 합니다.

우리는 사용 정책과 비교하여 GPTs를 검토하는 데 도움이 되는 새로운 시스템을 설정했습니다 . 

이러한 시스템은 기존 완화 조치에 더해 ​​사용자가 사기 행위, 증오성 콘텐츠, 성인용 테마와 관련된 유해한 GPTs를 공유하는 것을 방지하는 것을 목표로 합니다. 

또한 빌더가 자신의 신원을 확인할 수 있도록 허용하여 사용자 신뢰를 구축하기 위한 조치를 취했습니다. 

우리는 사람들이 GPTs를 어떻게 사용하는지 계속 모니터링하고 학습하며 안전 완화 조치를 업데이트하고 강화할 것입니다. 특정 GPT에 대해 우려사항이 있는 경우 GPT 공유 페이지의 신고 기능을 사용하여 우리 팀에 알릴 수도 있습니다.

GPTs는 계속해서 더욱 유용하고 스마트해질 것이며, 결국 GPTs가 현실 세계에서 실제 작업을 수행하도록 할 수 있게 될 것입니다. 

AI 분야에서 이러한 시스템은 종종 "에이전트"로 논의됩니다. 

우리는 이러한 미래를 향해 점진적으로 나아가는 것이 중요하다고 생각합니다. 

왜냐하면 신중한 기술 및 안전 작업과 사회가 적응할 시간이 필요하기 때문입니다. 

우리는 사회적 영향에 대해 깊이 생각해 왔으며 곧 더 많은 분석을 공유할 예정입니다.

개발자는 GPTs를 현실 세계에 연결할 수 있습니다
내장된 기능을 사용하는 것 외에도 GPT에서 하나 이상의 API를 사용할 수 있도록 하여 맞춤 작업을 정의할 수도 있습니다. 

플러그인과 마찬가지로 작업을 통해 GPTs는 외부 데이터를 통합하거나 실제 세계와 상호 작용할 수 있습니다. 

GPTs를 데이터베이스에 연결하거나, 이메일에 연결하거나, 쇼핑 도우미로 활용하세요. 예를 들어 여행 목록 데이터베이스를 통합하거나, 사용자의 이메일 받은 편지함을 연결하거나, 전자 상거래 주문을 용이하게 할 수 있습니다.

작업 설계는 플러그인 베타의 통찰력을 바탕으로 구축되어 개발자가 모델과 API 호출 방법을 더 효과적으로 제어할 수 있도록 해줍니다. 

기존 플러그인 매니페스트를 사용하여 GPT에 대한 작업을 정의할 수 있으므로 플러그인 베타에서 쉽게 마이그레이션할 수 있습니다.

기업 고객은 내부 전용 GPTs를 배포할 수 있습니다
몇 달 전 ChatGPT Enterprise를 출시한 이후 초기 고객들은 자신의 비즈니스에 맞는 더 많은 사용자 정의를 원했습니다. 

GPTs는 특정 사용 사례, 부서 또는 독점 데이터 세트에 대한 ChatGPT 버전을 생성할 수 있도록 하여 이 요청에 응답합니다. 

Amgen, Bain, Square와 같은 초기 고객은 이미 내부 GPTs를 활용하여 브랜드를 구현하는 마케팅 자료 제작, 지원 직원의 고객 질문 답변 지원, 신규 소프트웨어 엔지니어의 온보딩 지원 등의 작업을 수행하고 있습니다.

기업은 수요일부터 GPTs를 시작할 수 있습니다. 

이제 회사 내부 사용자가 코드 없이 내부 전용 GPTs를 설계하고 작업공간에 안전하게 게시할 수 있는 권한을 부여할 수 있습니다. 

관리 콘솔을 사용하면 GPTs 공유 방법과 외부 GPTs를 비즈니스 내에서 사용할 수 있는지 여부를 선택할 수 있습니다. 

ChatGPT Enterprise의 모든 사용과 마찬가지로 우리는 모델을 개선하기 위해 GPTs와의 대화를 사용하지 않습니다.

우리는 더 많은 사람들이 AI의 행동 방식을 형성하기를 원합니다
우리는 더 많은 사람들이 우리와 함께 구축할 수 있도록 GPTs를 설계했습니다. 

커뮤니티의 참여는 인류에게 이익이 되는 안전한 AGI를 구축하려는 우리의 사명에 매우 중요합니다. 

이를 통해 모든 사람은 광범위하고 다양한 범위의 유용한 GPTs를 확인하고 앞으로의 상황에 대해 보다 구체적인 감각을 얻을 수 있습니다. 

그리고 첨단 기술에 접근할 수 있는 사람들을 넘어 '무엇을 구축할지'를 결정하는 사람들의 그룹을 확대함으로써 우리는 더 안전하고 더 나은 AI를 갖게 될 가능성이 높습니다. 

사람들을 위한 것이 아니라 사람들과 함께 구축하려는 동일한 열망으로 인해 우리는 OpenAI API를 출시하고 AI 행동에 민주적 입력을 통합하는 방법을 연구하게 되었으며 이에 대해 곧 더 자세히 공유할 계획입니다.

ChatGPT Plus를 더욱 신선하고 사용하기 쉽게 만들었습니다
마지막으로 ChatGPT Plus에는 이제 2023년 4월까지의 최신 정보가 포함됩니다. 

모델 선택기가 얼마나 어려운지에 대한 피드백도 들었습니다. 

오늘부터 더 이상 모델 간에 이동하지 않아도 됩니다. 

필요한 모든 것이 한 곳에 있습니다. 

전환 없이 DALL·E, 브라우징, 데이터 분석에 모두 액세스할 수 있습니다. 

ChatGPT가 PDF 및 기타 문서 유형을 검색할 수 있도록 파일을 첨부할 수도 있습니다.

chatgpt.com 에서 찾아보세요 .


LLM모델이 글로벌 IT기업들에서 앞다투어 나오고 있는 시점을 맞아, 우리가 어떻게 이들을 활용할 수 있는지 알아보면 좋을 시점이 된 것 같다.

 

반응형
반응형

요즘 LLM 인공지능으로 세상이 또 하나의 변화에 직면한 것으로 보인다. 
그 중에서 가장 앞선 곳이 OpenAI라고 할 수 있다. 

AI의 구조에 대해 좀 더 빠르게 알아보는 것이 필요한 시점이라 생각한다.

1. AI 프로젝트 시작하기

요즘 ChatGPT로 촉발된 LLM(Large Language Model)이 폭발적으로 성장하고 있다.

이로 인해 많은 사람들이 인공지능에 대해 정말 많은 관심을 갖게 되었다.

파이썬은 그 여정에 있어서 강력한 동반자가 될 것이라고 생각한다.
왜냐하면 대부분의 인공지능 라이브러리를 파이썬에서 지원하고 있고, 배우기 쉽고 사용하기 편한 파이썬 언어가 인공지능 분야에서는 대세라고 생각하기 때문이다.

 

머신 러닝 라이브러리 소개

Scikit-Learn

Scikit-Learn은 사용하기 매우 쉽지만, 많은 머신 러닝 알고리즘을 효율적으로 구현하므로 머신 러닝을 배우기에 좋은 출발점이 된다.
이것은 2007년 David Cournapeau에 의해 만들어졌으며, 현재는 프랑스 컴퓨터 과학 및 자동화 연구소(Inria)의 연구팀이 주도적으로 이끌고 있다.

TensorFlow

TensorFlow는 분산 수치 계산을 위한 좀 더 복잡한 라이브러리다.
이것은 수백 개의 멀티-GPU(그래픽 처리 장치) 서버에 걸쳐 계산을 분산시켜 매우 큰 신경망을 효율적으로 훈련하고 실행할 수 있게 만들어준다.
TensorFlow(TF)는 Google에서 만들어졌으며, 많은 대규모 머신 러닝 애플리케이션을 지원한다.
2015년 11월에 오픈 소스로 공개되었으며, 2.0 버전은 2019년 9월에 출시되었다.

Keras

Keras는 신경망을 훈련하고 실행하기 매우 간단하게 만드는 고수준의 딥러닝 API이다.
Keras는 TensorFlow와 함께 번들로 제공되며, 모든 집약적인 계산을 위해 TensorFlow에 의존한다.

 

데이터 수집 및 처리

모든 AI 프로젝트의 시작점은 데이터 수집이다.
파이썬은 데이터 수집과 처리를 위한 훌륭한 라이브러리들을 제공한다.
pandas는 데이터 분석을 위한 필수 라이브러리이며, numpy는 수치 계산을 위한 강력한 도구다.
scikit-learn은 데이터 전처리와 모델링을 위한 간편한 기능들을 제공한다.
이 라이브러리들을 사용하여 데이터를 수집하고, 정제하며, 유용한 특성을 추출하는 작업을 진행한다.

첫 번째 머신러닝 모델 구축

데이터가 준비되었다면, 간단한 머신러닝 모델을 구축할 차례다.
scikit-learn의 분류기나 회귀 모델을 사용해보자.
예를 들어, 붓꽃(Iris) 데이터 세트를 사용하여 각 붓꽃의 종류를 분류하는 모델을 만들 수 있다.
이 과정에서 모델을 훈련시키고, 검증하며, 성능을 평가하는 방법을 배울 수 있다.

 

2. 파이썬으로 복잡한 AI 문제 해결하기

딥러닝 입문

TensorFlow나 PyTorch와 같은 프레임워크를 사용하여 딥러닝 모델을 구축하는 방법을 배워보자.
이러한 프레임워크는 복잡한 신경망을 쉽게 설계하고 학습시킬 수 있게 해준다.
간단한 이미지 분류부터 시작하여 점차 복잡한 문제로 나아가자.

사례 연구

실제로 파이썬을 사용하여 해결된 복잡한 AI 문제들을 살펴보는 것도 매우 유익하다.
Google의 AlphaGo부터 자율 주행 자동차에 이르기까지, 파이썬은 다양한 혁신적인 프로젝트에 사용되었다.

3. 파이썬 AI 리소스와 커뮤니티

학습 리소스

Coursera’나 ‘edX’와 같은 온라인 학습 플랫폼에서는 파이썬과 AI 관련 강좌를 제공한다.
또한 ‘GitHub’에는 수많은 오픈소스 프로젝트가 있어 실제 코드를 살펴보고 학습할 수 있는 기회를 제공한다.

커뮤니티 참여

Stack Overflow’, ‘Reddit’, ‘Kaggle’과 같은 플랫폼에서는 전 세계의 개발자들과 지식을 공유하고 문제를 해결할 수 있다.
또한, 파이썬과 AI 관련 컨퍼런스나 워크샵에 참여하여 네트워킹을 할 수 있다.

최신 동향 유지

AI 분야는 빠르게 발전하고 있다.
arXiv’, ‘Google Scholar’ 등의 리소스를 통해 최신 연구를 접하고, ‘Medium’이나 ‘Towards Data Science’와 같은 블로그를 통해 새로운 트렌드를 확인하도록 하자.

반응형
반응형

컴퓨터 비전이나 텍스트 분석은 성능 좋은 오픈 API나 노하우가 축적되고 공유되어 빠르게 발전하고 있다. 하지만 투자 업계에서는 금융 데이터를 손쉽게 처리해주는 판다스 같은 라이브러리가 있어도, 성능 좋은 알고리즘이나 방법론이 공유되는 경우가 거의 없다.

세계 경제가 긴밀하게 연동하고 경제 주체들의 투자 패턴이 다양해짐에 따라 고려해야 할 변수가 기하급수적으로 증가한 반면 시계열 데이터를 기본으로 한 투자 데이터는 그 양이 한정적이다. 애널리스트 분석에 자주 사용되는 OECD 경기선행지수, 국가별 GDP, 금리 자료 등은 업데이트 주기가 길다. 이러한 데이터의 한계로 인해 좋은 모델을 만들기가 어렵다고 한다. 

금융은 자본주의 사회에서 우리의 삶에 깊숙이 침투하여 개인의 일상생활과 밀접한 관계를 맺고 있고 우리가 살아가며 생산하는 수많은 데이터를 통해 연결되어 있다. 많은 의사결정 프로세스가 데이터 기반으로 전환하는 시대에 투자라고 예외일 수 없다. 나날이 복잡다단해지는 투자 환경에서 사람의 '감'에 기반한 투자 의사결정은 점점 힘을 잃어갈 것이다.

투자 영역에서 활용하는 데이터('실전 금융 머신러닝 완벽분석'의 저자인 마르코스 로페즈가 분류)

재무제표 데이터 마켓 데이터 분석 데이터 대체 데이터
자산 가격/변동성 애널리스트 추천 위성/CCTV 이미지
부채 거래량 신용 등급 구글 검색어
판매량 배당 이익 예측 트윗/SNS
비용/이익 이자율 감성 분석 메타데이터
거시 변수 상장/폐지 ... ...

 

파이썬으로 만드는 투자전략과 주요 지표

1. 바이앤홀드(Buy & Hold) 전략

바이앤홀드는 주식을 매수한 후 장기 보유하는 투자 전략이다. 즉 매수하려는 종목이 충분히 저가라고 판단될 때 주기적으로 매수한 후 장기간 보유하는 식으로 투자하는 방법이다. 
주가는 예측이 불가하지만 경제가 성장함에 따라 장기적으로 우상향한다는 투자 철학의 관점에서 보면 합리적인 투자 방법이다.

주피터 노트북(Jupyter notebook) 환경에서 실행한다고 가정하고, 관련 라이브러리를 다음과 같이 설치해야 한다.

!pip install matplotlib
!pip install pandas
!pip install -U finance-datareader # 국내 금융데이터를 포함 pandas-datareader를 대체

준비가 되면, 관련 라이브러리를 불러온다

import pandas as pd
import numpy as np
import FinanceDataReader as fdr

본격적으로 바이앤홀드 전략을 구현해 보자. FinanceDataReader 라이브러리에서 직접 테슬라(TSLA) 데이터를 추출하여, 판다스의 head()함수를 사용해 데이터를 살펴본다.

df = fdr.DataReader('TSLA', '2013-01-01', '2023-08-31')
df.head()

데이터는 'Date'가 인덱스로 설정되고, 시작가(Open), 고가(High), 저가(Low), 종가(Close), 수정 종가(Adj Close), 거래량(Volume)으로 구성된다.

결측치(데이터에 값이 없는 것, NA)가 있는 지 살펴본다.

df.isin([np.nan, np.inf, -np.inf]).sum()

결측치가 없는 것을 확인했으니, 바이앤홀드 전략을 수정 종가(Adj Close)를 이용해 테스트한다.
보통 전략을 테스트할 때는 종가를 기준으로 처리한다.

수정 종가를 슬라이스해 별도의 데이터셋을 만든다.

price_df = df.loc[:,['Adj Close']].copy()
price_df.plot(figsize=(16,9))

수정 종가(Adj Close)로 DataFrame을 만들고 종가(Close) 모양이 어떻게 생겼는지 그래프를 통해 살펴본다.
전체 기간을 보면 주가가 많이 상승했다. 하지만 짧은 시점을 확인해 보면 다를 수 있다.
테슬라는 최근 2022~2023년에 주가 변동성이 매우 큰 것을 알 수 있다. 

from_date = '2022-01-01'
to_date = '2023-08-31'
price_df.loc[from_date:to_date].plot(figsize=(16,9))

2022년 400달러에 달하던 주가가 108달러까지 떨어지는 등 최고점 투자 대비 70% 가량까지 하락했다.
이렇게 최고점 대비 현재까지 하락한 비율 중 최대 하락률을 최대 낙폭(maximum draw down, MDD)이라고 한다.

그 다음으로 일별 수익률을 계산해 보자.

price_df['daily_rtn'] = price_df['Adj Close'].pct_change()
price_df.head(10)

바이앤홀드 전략에서 일별 수익률을 계산하는 이유는 매수한 시점부터 매도한 시점까지 보유하게 되는데 일별 수익률을 누적으로 곱하면 최종적으로 매수한 시점 대비 매도한 시점의 종가 수익률로 계산되기 때문이다.

다음에는 바이앤홀드 전략의 누적 곱을 계산해 보자. 판다스 cumprod() 함수를 사용하면 쉽게 계산된다.

price_df['st_rtn'] = (1+price_df['daily_trn']).cumprod()
price_head(10)
price_df['st_rtn'].plot(figsize=(16,9))

이번에는 매수 시점을 정해서 수익률을 계산해 본다.

base_date= '2020-01-02'
tmp_df = price_df.loc[base_date:,['st_rtn']] / price_df.loc[base_date,['st_rtn']]
last_date = tmp_df.index[-1]
print('누적 수익 : ',tmp_df.loc[last_date,'st_rtn'])
tmp_df.plot(figsize=(16,9))

base_date변수를 선언해 새로운 기준 일자를 정한다. 특정 일자를 기준으로 수익률을 계산하고 누적 수익을 보니 8.95까지 상승했다. 2020년 1월 2일에 처음 테슬라 주식을 매수했다면 8.95배의 수익률을 얻을 수 있었다는 뜻이다.

사실 지금 보여준 바이앤홀드 전략에는 복잡한 코딩은 없었다. 단지 주어진 기간의 수익률만 확인했을 뿐이다.
여기에 신호(매수/매도 신호)를 추가한다면 다양한 전략으로 응용할 수 있다.

반응형

- 연평균 복리 수익률(CAGR)

수익률 성과를 분석할 때 산술평균 수익률보다 기하평균 수익률을 더 선호한다. 기하평균 수익률이 복리 성질과 주가 변동이 심한 때에 따라 변동성을 표현해 주기 때문이다. 

이 CAGR 수식을 파이썬 코드로 구현하면 다음과 같다.

CAGR = price_df.loc['2023-08-30', 'st_rtn'] ** (252./len(price_df.index)) -1

우리가 가진 데이터셋의 마지막 날짜가 2023년 8월 30일이다. 해당일자의 최종 누적 수익률의 누적 연도 제곱근을 구하는 것이다. 또한 우리는 일(Daily) 데이터를 사용했으므로 전체년도를 구하기 위해 전체 데이터 기간을 252(금융공학에서 1년은 252 영업일로 계산)로 나눈 역수를 제곱(a**b) 연산한다. 그리고 -1을 하면 수익률이 나온다.

- 최대 낙폭(MDD)

최대 낙폭은 최대 낙폭 지수로, 투자 기간에 고점부터 저점까지 떨어진 낙폭 중 최댓값을 의미한다. 이는 투자자가 겪을 수 있는 최대 고통을 측정하는 지표로 사용되며, 낮을수록 좋다.

이 MDD 수식을 파이썬 코드로 구현하면 다음과 같다.

historical_max = price_df['Adj Close'].cummax()
daily_drawdown = price_df['Adj Close'] / historical_max - 1.0
historical_dd = daily_drawdown.cummin()
historical_dd.plot()

수정 종가에 cummax() 함수 값을 저장한다. cummax()는 누적 최댓값을 반환한다. 전체 최댓값이 아닌 행row별 차례로 진행함녀서 누적 값을 갱신한다. 현재 수정 종가에서 누적 최댓값 대비 낙폭률을 계산하고 cummin() 함수를 사용해 최대 하락률을 계산한다. 출력 그래프를 보면 최대 하락률의 추세를 확인할 수 있다.

- 변동성(Vol)

주가 변화 수익률 관점의 변동성을 알아보자. 변동성은 금융 자산의 방향성에 대한 불확실성과 가격 등락에 대한 위험 예상 지표로 해석하며, 수익률의 표준 편차를 변동성으로 계산한다.

만약 영업일 기준이 1년에 252일이고 일별 수익률의 표준 편차가 0.01이라면, 연율화된 변동성은 다음 수식과 같이 계산된다.

변동선 수익을 파이썬 코드로 구현하면 다음과 같다.

VOL = np.std(price_df['daily_rtn']) * np.sqrt(252.)

변동성은 수익률의 표준편차로 계산한다. 이는 일Daily 단위 변동성을 의미하는데, 루이 바슐리에의 '투기이론'에서 주가의 변동폭은 시간의 제곱근에 비례한다는 연구 결과에 따라 일 단위 변동성을 연율화할 때 252의 제곱근을 곱한다.

- 샤프 지수

샤프 지수는 위험 대비 수익성 지표라고 볼 수 있다. 

샤프 지수를 파이썬 코드로 구현하면 다음과 같다.

Sharpe = np.mean(price_df['daily_rtn']) / np.std(price_df['daily_rtn']) * np.sqrt(252.)

사후적 샤프 비율을 사용했다. 실현 수익률의 산술평균/실현 수익률의 변동성으로 계산하므로 넘파이의 평균을 구하는 함수와 연율화 변동성을 활용해 위험 대비 수익성 지표를 계산한다.

- 성과 분석 결과

최종 성과를 분석해 보자. 

CAGR = price_df.loc['2023-08-30', 'st_rtn'] ** (252./len(price_df.index)) -1
Sharpe = np.mean(price_df['daily_rtn']) / np.std(price_df['daily_rtn']) * np.sqrt(252.)
VOL = np.std(price_df['daily_rtn']) * np.sqrt(252.)
MDD = historical_dd.min()

print('CAGR : ',round(CAGR*100,2), '%')
print('Sharpe : ',round(Sharpe,2))
print('VOL : ',round(VOL*100,2), '%')
print('MDD : ',round(-1*MDD*100,2), '%')

CAGR : 55.34%
Sharpe : 1.06
VOL : 57.18%
MDD : 73.63%

테슬라는 2013년부터 현재(2023년 8월 30일 기준)까지 연평균 복리 수익률 CAGR로 55% 성장했다. 샤프 지수 Sharpe는 1 이상만 되어도 좋다고 판단한다.

다음으로 변동성 VOL을 보면 57%인 것을 확인할 수 있는데, 이는 주가 수익률이 꽤 많이 출렁인 것을 의미한다. 장기간의 시점에서 주가를 바라볼 때는 안정적으로 우상향했다고 생각할 수 있지만, 하루하루 주가 흐름은 그닥 안정적이지 않았다는 뜻이다.

마지막으로 최대 낙폭 MDD는 73%가 하락한 경우가 있음을 알 수 있다. 최고점에서 주식을 구입한 경우에는 견디가 어려운 낙폭임을 인지할 필요가 있다.

기업 성장성이 확실하다고 판단한 주식은 싸다고 생각되는 시장이 어려운 시기에 사서 장기적으로 보유하다가 고점이라고 생각되는 시점인 대중이 열광하는 시점에 처분한다는 자세를 잊지 말아야겠다.

반응형
반응형

1. Rule based programming

머신러닝 이전에 했던 방식으로 Input된 대상을 구별하기 위한 특징들(features)을 사람들이 직접 찾아내서, 판단할 수 있는 로직을 코딩으로 작성하여 결과(Output)을 찾아내는 방식임.

 

2. Hand designed feature based machine learning

사람들이 특징들(features)을 찾아내고, 특징들에 대한 로직은 코딩 대신 머신러닝(Machine Learning)을 통해 만들어 결과(Output)을 찾아내는 방식임.

* 머신러닝(Machine Learning)에 대한 기본 이해

  • 학습 단계1. 학습데이터 준비
    (사람들이 직접 특징 정의하고 학습 데이터 생성을 위한 코딩 작업 수행)
    1-1. 이미지 수집 → 1-2. 특징 정의 → 1-3. 학습 데이터 생성
  • 학습 단계2. 모델 학습 : 최적의 연산 집합은 모든 Try 중에 Error가 제일 작은 것!
    (오차를 최소화하는 연산을 찾아내는 것이 핵심으로, Try&Error 방식으로 최적의 연산 집합을 찾아냄)
    2-0. 예측 및 오차 : 

 

3. Deep Learning

Deep&Wide Neuralnetwork : 엄청나게 많은 연산들의 집합, 자유도가 높아 연산들의 구조를 잡고 사용
구조 예) CNN, RNN, etc

※ Deep Learning(CV, NLP 차이)

  • Computer Vision  : 두 단계로 크게 구분
     1-1 이미지 수집 → 1-2 학습 데이터 생성
  • Natural Language Processing : 세 단계로 크게 구분(토큰화 과정 추가)
     1-1 텍스트 수집 → 1-2 정의된 특징(토큰화, 의미분석에 용이한 토큰으로 쪼갬) → 1-3 학습 데이터 생성

 

반응형

4. Pre-training & Fine-tuning (GPT)

기존의 딥러닝 문제점 : 분류 대상이 (태스크가) 바뀔 때마다 다른 모델이 필요

1단계 Pre-training : 모든 Image > Features > Mapping from features > 분류 결과(>1k)

2단계 Fine-tuning : 구분을 원하는 특정 이미지들을 입력

  • Image input > Features(1단계에서 학습된 연산을 고정(Frozen)한 상태) > Mapping from features(테스크를 수행하기 위해 mapping쪽에 해당하는 연산들만 새로 학습) > 특정 이미지 Output

여전히 태스크마다 다른 모델이 필요하지만, 필요한 데이터 수가 적어지고 개발 속도가 올라가게 됨!

 

5. Big Model & zero/few shot (ChatGPT 구조)

ChatGPT를 이해하기 위해 언어 모델(Language model)에 대한 이해가 선행되어야 함.

딥러닝 초창기의 언어 처리 모델은 “RNN” 아키텍쳐로 만들어짐

  • RNN(recurrent neural network), 노드 사이의 연결고리가 cycle을 이룬다고 해서 붙여진 이름으로, 자연어과 같은 sequence 형태의 데이터를 다루는데 특화되어 있음

단순한 다음 단어 맞추기가 ChatGPT롤 발전하게 된 계기?

Emergence(2017.4) :

OpenAI에서 Alec Radford가 언어 모델을 RNN으로 만들고 있었음

그런데 특정 뉴런이 감성 분석을 하고 있음을 발견함(긍정과 부정을 구분해 내는군)

언어 모델링을 하다보면 의도하지 않은 능력이 생기게 되는게 아닐까? > “Emergence”

  • Alec Radford는 GPT논문의 1저자

 

Transformer(2017.6) :

TransformerRNN, CNN과 유사한 아키텍처의 일종

  • “Attention”이란 항목과 항목 사이의 연관성

Transformer는 여러모로 성능이 좋았음. 계산 효율이 기존의 RNN 등에 비해 대단히 높았던게 이점, 게다가 결과의 품질도 더 좋음 > 이후 비전, 추천, 바이오 등 다른 모든 분야에서 쓰는 기술이 됨.

Alec Radford도 자연스럽게 Transformer를 가지고 실험하기 시작함.

 

GPT(2018.6) :

Alec Radford와 동료인 Ilya Sutskever 등이 RNN에서 Transformer로 넘어가며 출판

“Generative pretraining(GP)”을 하는 Transformer(T)

Pretraining-finetuning 패러다임의 대표적인 논문 큰 스케일에서 언어 모델링을 통해 사전학습 모델을 만들고, 이 모델을 파인튜닝하면 다양한 NLP 태스크에서 좋은 성능을 보임.

 

GPT-2(2019.2) :

Ilya Sutskever가 오랫동안 주장했던 믿음은 데이터를 많이 부어 넣고 모델 크기를 키우면 신기한 일들이 일어난다였음

Transformer 전까지는 큰 모델의 학습을 어떻게 할 것인가가 문제였는데, Transformer가 계산 효율이 높아 스케일링에 유리

모델을 키우고(117M > 1.5B)데이터를 왕창 부음(4GB > 40GB) -> GPT-2의 탄생

생성에 너무 뛰어나서 해당 모델이 가짜 정보를 다량 생성할 위험성이 크다고 판단, OpenAIGPT-2를 공개하지 않는다고 함

언어 생성을 아주 잘하게 될 뿐더러 emergence!가 또 보임

GPT2는 방대한 데이터를 기반으로 세상에 대해 많이 배운 모델

  • emergence!:Zero-shot learning : 예시를 전혀 보지 않고, 모델 업데이트 없이 새로운 태스크를 수행
    “Unsupervised multitask learners, 하나를 가르쳤는데 열을 아네”
    독해, 번역, 요약 Q&A 등에 대해 zero-shot 능력이 꽤 있음! 
    Zero-shot인데도 특정 태스크는 기존의 SOTA 모델들을 짓눌러버림
  • SOTA란 state-of-the-art, 즉 현존하는 제일 좋은 모델

 

GPT-3(2020.6) :

여기서 한 번 더 크기를 키운 것이 GPT-3(모델 1.5B > 175B, 데이터 40GB > 600GB+)

많은 데이터로 pretraining해서 더욱 놀라운 생성 능력을 갖추게 됨

역시 여러 측면으로 “emergence”를 확인:

지식을 포함?(world knowledge), 학습 없이 태스크를 배우는 능력?(few-shot learners)

  • “Emergence”: In-context learning, Few-shot도 모델 파인튜닝 없이 되네? : 프롬프트에 예시 몇 개(“few-shot”)를 넣어주면 모델 업데이트 없이 새로운 태스크를 수행

 

GPT-4 출현 : 

CLIP(2021.1) : “zero-shot” 이미지 분류

DALL-E(2021.1): 주어진 텍스트로부터 이미지 생성

Codex(2021.8) : 코드 생성을 위한 모델

InstructGPT(2022.1) : 명령에 대한 파인튜닝과 강화학습 > 이미 지식은 다 있다, 어떻게 뽑아낼 것인가

 

※ 위 정보는 fastcampus.co.kr의 업스테이지 '모두를 위한 ChatGPT UP!'의 강의 내용에서 요약 정리한 것입니다. 구체적인 내용을 배우시려면 업스테이지 강의를 들으시면 많은 도움이 되실 겁니다!

반응형
반응형

최근 AI비서, ARS 등 언어 처리에 대한 분야에서 많이 사용되는 딥러닝 아키텍처인 Transformer에 대해 공부중이다.
공부한 내용을 정리하면 좀 더 기억이 잘 되기에 기록을 남겨본다.

RNN과 LSTM 네트워크는 다음 단어 예측, 기계 번역, 텍스트 생성 등의 태스크에서 사용되어 왔었다.
하지만 트랜스포머가 발표된 후에는 트랜스포머에게 자리를 내주었다고 할 수 있다.
트랜스포머가 출연하면서 자연어 처리 분야가 획기적으로 발전하고, 이를 기반으로 한 BERT, GPT-3, T5 등과 같은 아키텍처가 나오게 되었다.

트랜스포머는 RNN에서 사용한 순환 방식을 사용하지 않는다.
대신 셀프 어텐션(self-attention)이라는 특수한 형태의 어텐션을 사용한다. 
트랜스포머는 인코더-디코더로 구성된 모델이다.
인코더에 원문을 입력하면 인코더는 원문의 표현 방법을 학습시키고 그 결과를 디코더로 보낸다.
디코더는 인코더에서 학습한 표현 결과를 가지고 사용자가 원하는 문장을 생성한다.

트랜스포머 인코더 디코더 기본 구조도

인코더와 디코더의 구체적인 이해는 다음에 하기로 한다.

대신 Transformer를 기반으로 한 BERT의 특징에 대해 정리해 본다.

BERT(Bidirectional Encoder Representation from Transformer)는 구글에서 2018년 발표한 최신 임베딩 모델이다. 대량의 영어 데이터로 학습된 사전학습 언어 모델로 질문에 대한 대답, 텍스트 생성, 문장 분류 등과 같은 태스크에사 가장 좋은 성능을 도출해 자연어 처리 분야에 크게 기여해 왔다. 

반응형

BERT의 특징

  • Masked Language Model(MLM) : 어떤 문장의 특정 부분을 Masking처리하여 모델이 Masking 처리된 부분을 예측하도록 학습시키는 방식
  • Next Sentence Prediction(NSP) : 두 문장이 이어지는 문장인지 아닌지 맞히도록 학습
  • 자기지도 학습 : 학습 Label을 사람이 직접 만들지 않고 스스로 만든 데이터를 학습함으로써 언어의 기본 소양을 쌓음. 이처럼 스스로 정답이 있는 학습 데이터를 만들어 학습하는 방식을 자기지도학습(Self-supervised Learning)이라고 하고 이러한 방식으로 만들어진 언어 모델을 사전학습 모델(Pre-trained Language Model)이라고 한다.
  • 전이학습(Transfer Learning) : 사전학습 모델을 기반으로 특정 태스크를 위해 한번 더 학습하는 방식을 전이학습이라고 하고, 이 학습 단계를 파인튜닝(Fine tuning)단계라고 한다. 파인튜닝이란 사전학습 모델을 기반으로 특정 태스크를 위해 딥러닝 모델을 미세하게 조정하는 학습 과정을 말한다.

태스크 활용 사례 : 사전학습 모델은 모델 자체로 특정 기능을 수행할 수 없다. 하지만 파인 튜닝을 통해 여러 다양한 태스크에 활용이 가능하다. 

Case 1. 기계독해(MRC, Machine Reading Comprehension) 
 
Case 2. 텍스트 분류(Text Classification)
 
Case 3. 문장 유사도 분석(STS, Semantic Textual Similarity)
 
Case 4. 문서 요약 모델(Text Summarization)
 

* RNN(Recurrent Neural Networks) 순환신경망 : 긴 문장의 의미를 파악하고 해당 문장이 의미하는 것이 무엇인지 예측하기 위한 방법으로 쉽게 말해 '여러개의 단어를 입력받게 되었을 때 앞에 입력받은 단어(토큰)을 잠시 기억하고 있다가 이 단어가 얼마나 중요하지 분석해 가중치를 담아 다음 단계로 넘기는 구조로 되어 있다.

* LSTM(Long Short Term Memory)  장단기 메모리 : RNN 기법의 하나로 기존 RNN의 문제인 기울기 소멸 문제(vanishing gradient problem)를 방지하기 위해 개발되었다.

 
반응형
반응형

머신러닝을 접하면서 마주하게 될 용어들을 정리해 보도록 한다. 

1. 자연어 처리(Natural Language Processing, NLP) : 자연어 처리(NLP)는 인간이 대화하는 말의 형태를 기계가 배우는 머신러닝 방법을 말한다. 지금까지 기본적으로 NLP로 진행해 왔던 분류는 다음과 같다.
- 텍스트 분류 및 순위(Text classification and ranking) : 스팸이나 정크 메일을 필터링 해서 분류하는 것이 대표적이다.
- 감성 분석(Sentiment analysis) : 이 분석은 머신이 제공하는 피드백에 대한 감성적 반응을 예측한다. 고객 관계와 만족도가 팩터가 된다.
- 문서 요약(Document summarization) : 복합적이고 복잡한 긴 글을 짧고 압축된 정의를 사용해 제시하는 방법이다. 궁극적인 목적은 이해하기 쉽게 만드는데 있다.
- 개체 이름 인식(Named-Entity Recognition, NER) : 이것은 비구조화된 언어들 세트에서 구조화되고 인식가능한 데이터를 찾아내는 것이다. 이 머신러닝 프로세스는 대화 중 문맥에 맞게 적용하거나 가장 적합한 반응을 이끌어내는데, 가장 적합한 키워드를 알아내는 것을 배운다. 
- 음성 인식(Speech recognition) : 음성 인식은 아마존 알렉사, 구글 어시스턴트 등에서 쉽게 볼 수 있는 메커니즘이다. 이 메커니즘의 기본은 사람의 음성으로부터 오디오 신호를 인식하여 활자와 결합하는 것을 배우는 것이다.  
- 기계 번역(Machine translation) : 기록된 특정 나라 언어를 다른 나라의 언어로 변환하는 자동화된 시스템을 말한다. 

반응형

2. 데이터셋(Dataset) : 머신러닝의 실행 가능성과 진행을 테스트하기 위해 사용할 수 있는 변수들의 집합이라고 할 수 있다. 데이터는 머신러닝을 진행하기 위한 필수 요소이다. 
- 트레이닝 데이터(Training data) : 이름에서 알 수 있듯이, 트레이닝 데이터는 추론을 통한 모델 학습을 통해 패턴을 예측하기 위해 사용된다. 트레이닝 데이터의 영향력이 매우 크기 때문에, 다른 요소에 비해 매우 중요한 요소라 할 수 있다. 
- 검증 데이터(Validation data) : 트레이닝된 모델의 하이퍼 파라미터를 미세 조정하는데 사용하는 데이터이다. 이를 통해 최종 완성된 모델이 만들어진다.
- 테스트 데이터(Test data) : 모델 학습이 완성되었다고 생각되면, 테스트 데이터를 통해 완성된 모델이 실제 제대로 동작하는지 확인한다. 

3. 컴퓨터 비전(Computer Vision, CV) : 이미지와 영상 데이터에 대한 고급 분석을 제공하는 툴이라고 할 수 있다. 
- 이미지 분류(Image classification) : 다양한 이미지와 그림 표현을 인식하고 학습하도록 한다. 이 모델은 색상 변경과 같은 작은 변화가 있는 동일한 이미지를 인식하여 동일한 이미지로 유지한다.
- 객체 인식(Object detection) : 이미지 분류와 달리, 전체 뷰에서 객체 이미지를 인식하는데 사용되는 모델이다. 이 모델은 대용량 데이터 셋에 객체 식별을 적용할 수 있고, 패턴 인식이 가능하도록 해준다.
- 이미지 분할(Image segmentation) : 이 모델은 과거에 처리한 픽셀과 특정 이미지 또는 영상 픽셀을 연결하는 것이다. 
- 특징 인식(Saliency detection) : 이미지 또는 영상 속에서 시각적으로 가장 중요한 물체가 어디에 있는지 얼마나 중요한지 찾아내기 위한 모델이다. 
* Object detection은 영상 속 존재하는 모든 물체들의 위치를 box형태로 찾아내고 각각의 종류를 분류하는 것이고, Object segmenatation은 영상을 같은 종류 물체끼리 분할하여 픽셀 단위로 표시하는 것이다. Saliency detection은 이미지 내에서 중요하다고 생각되는 물체를 검출해내는 방법과 사람의 시선이 어디에 가장 오래 머물지 예측하는 방법으로 나뉜다.

  

반응형
반응형

머신러닝에 있어, 가장 먼저해야 하는 일 중 하나가 데이터 정제(Data Cleaning)입니다.

왜냐하면 바로 모델을 훈련할 수 있는 데이터셋을 확보하는 것이 실제로는 매우 어렵기 때문입니다.

따라서, 결측값(NaN)은 없는지, 이상치(outlier)는 없는지 알아보기 위해 데이터셋을 주의깊게 살펴보아야 합니다. 

값이 큰 열이 있는 경우 정규화를 통한 보정이 필요하기도 합니다. 

이번에는 데이터 정제(Data Cleaning)에 필요한 일반적인 작업에 대해 알아보도록 하겠습니다.

 

결측값(NaN)이 있는 열 정제하기

다음 데이터로 된 NaNDataset.csv 파일이 있다고 가정하겠습니다.

눈으로 봐도 몇개 열에 결측값이 있는 것을 확인할 수 있습니다.

작은 데이터셋에서는, 쉽게 결측값을 찾을 수 있습니다.

하지만, 큰 데이터셋에서는, 눈으로 알아내는 게 거의 불가능할 것입니다.

결측값을 찾아내는 효과적인 방법은 판다스(Pandas) 데이터프레임으로 데이터셋을 로드해서 데이터프레임의 빈 값(NaN) 여부를 확인하기 위해 isnull() 함수를 사용하는 것입니다.

>>> import pandas as pd
>>> df = pd.read_csv('NaNDataset.csv')
>>> df.isnull().sum()

B 컬럼에 두개의 빈 값이 있는 것을 볼 수 있습니다.

판다스(Pandas)에서 빈 값이 포함된 데이터셋을 로드할 때, 빈 필드를 나타내는 NaN을 사용할 것입니다.

다음은 데이터프레임의 결과물입니다.

컬럼의 평균값으로 NaN 대체하기

데이터셋의 NaN(빈 값)을 처리하는 방법 중 하나는 그 빈 값이 위치한 컬럼의 평균값으로 빈 값을 대체 처리하는 것입니다.

다음의 스니펫 코드는 B 컬럼의 모든 빈 값(NaN)을 B 컬럼의 평균값으로 대체합니다.

>>> df.B = df.B.fillna(df.B.mean()) # NaN(빈 값)을 B 컬럼의 평균값으로 대체합니다.
>>> df

열 제거하기

데이터셋에서 빈 값(NaN)을 처리하는 다른 방법은 빈 값이 포함된 열을 제거하는 것입니다.

아래와 같이 dropna() 함수를 사용해서 처리할 수 있습니다.

>>> df = pd.read_csv('NaNDataset.csv')
>>> df = df.dropna()
>>> df

NaN이 포함된 행을 제거한 후에 인덱스 순번이 더 이상 맞지 않는다는 것을 알 수 있습니다.

인덱스를 재설정하고 싶다면, reset_index() 함수를 사용합니다.

>>> df = df.reset_index(drop=True) # 인덱스를 재설정합니다
>>> df

반응형

중복된 열 제거하기

다음 데이터로 된 DuplicateRows.csv 파일이 있다고 가정하겠습니다.

중복된 모든 열을 찾기 위해, 먼저 데이터셋을 데이터프레임에 로드합니다.

그리고, duplicated() 함수를 적용합니다.

>>> df = pd.read_csv('DuplicateRows.csv') # 판다스(Pandas) 라이브러리는 이미 로드했다고 가정합니다.
>>> df.duplicated(keep=False))

어떤 열이 중복되었는지 알려줍니다. 위 예에서는, 인덱스 1, 2, 5, 6열이 중복입니다. 

keep 인수를 사용하면 중복을 표시하는 방법을 지정할 수 있습니다.

  • 기본값은 'first' : 첫번째 나타나는 것을 제외한, 모든 중복이 True로 표시됩니다.
  • 'last' : 마지막으로 나타나는 것을 제외한, 모든 중복이 True로 표시됩니다.
  • False : 모든 중복이 True로 표시됩니다.

만약 keep 인수를 'first'로 설정하면, 다음과 같은 결과물을 보게 될 것입니다:

따라서, 모든 중복 열들을 보고 싶다면, keep 인수를 False로 설정해야 합니다. 

>>> df[df.duplicated(keep=False)]

중복 행을 삭제하려면 drop_duplicates() 함수를 사용할 수 있습니다.

>>> df.drop_duplicates(keep='first', inplace=True) # 처음 열은 그대로 두고, 그 다음 중복 열만 제거합니다.
>>> df

기본적으로, drop_duplicates() 함수는 원본 데이터프레임을 수정하지 않고, 제거된 열이 포함된 데이터프레임을 반환합니다.

만약 원본 데이터프레임을 수정하고 싶다면, inplace 파라미터를 True로 설정해야 합니다.

때로는 데이터셋의 특정 열에서 발견된 중복만 제거하고 싶은 경우가 있습니다.

예를 들어, 3, 4열의 B컬럼은 값이 다르지만, A, C 컬럼은 동일합니다. 이를 기준으로 제거해 보도록 하겠습니다.

>>> df.drop_duplicates(subset=['A', 'C'], keep='last', inplace=True) # A, C 컬럼에 모든 중복을 제거하고, 마지막 열을 남깁니다.
>>> df

컬럼 정규화하기

정규화는 데이터 정리 프로세스 중에 자주 적용되는 기술입니다.

정규화의 목적은 데이터 범위의 숫자 열 값을 변경하여, 값 범위의 차이를 수정하지 않고 공통 척도를 적용하는 것입니다.

일부 알고리즘은 데이터를 올바르게 모델링하기 위해 정규화가 중요합니다. 

예를 들어, 데이터셋 열 중 하나는 0에서 1까지의 값을 포함하고 다른 열은 400,000에서 500,000까지의 값을 가질 수 있습니다. 

두 개의 열을 사용하여 모델을 훈련하면 숫자의 척도가 크게 달라질 수 있습니다. 

정규화를 사용하면 두 열의 값 비율을 제한된 범위로 유지하면서 값의 비율을 유지할 수 있습니다.

판다스(Pandas)에서는 MinMaxScaler 클래스를 사용하여 각 열을 특정 값 범위로 확장할 수 있습니다.

다음 데이터로 된 NormalizeColumns.csv 파일이 있다고 가정하겠습니다.

다음 스니펫 코드는 모든 열의 값을 (0,1) 범위로 조정합니다.

>>> import pandas as pd
>>> from skleran import preprocessing
>>> df = pd.read_csv('NormalizeColumns.csv')
>>> x = df.values.astype(float)
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> x_scaled = min_max_scaler.fit_transform(x)
>>> df = pd.DataFrame(x_scaled, columns=df.columns)
>>> df

이상치(outlier) 제거하기

통계에서 이상치(이상점, outlier)는 관측된 다른 점들과 먼 지점의 점입니다.

예를 들어, 다음과 같은 값들(234, 267, 1, 200, 245, 300, 199, 250, 8999, 245)이 세트로 주어졌다고 하면, 이 중에서 명백하게 1과 8999는 이상치(oulier)입니다. 

그들은 나머지 값들과 뚜렷이 구별되며, 데이터셋의 대부분의 다른 값들과 달리 "바깥에 위치합니다". 

이상치는 주로 기록 또는 실험 오류의 오류로 인해 발생하며 머신러닝에서는 모델을 학습하기 전에 이상치를 제거해야 합니다. 

그렇지 않으면 모델을 왜곡시킬 수 있습니다.

이상치를 제거하는 데는 여러 가지 기술이 있으며,이번에서는 두 가지를 논의합니다.

  • Tukey Fences
  • Z-Score

Tukey Fences

Tukey Fences는 사분위 범위(IQR, interquartile range)를 기반으로 합니다. 

Q1이라고 표시된 첫번째 사분위수는 데이터셋의 값 중 첫번째 25 %를 보유하는 값입니다.

3분위수(Q3)은 데이터셋의 값 중 3번째의 25 %를 보유하는 값입니다. 

따라서, 정의에 따르면, IQR = Q3-Q1입니다.

아래 그림은 짝수 및 홀수 값을 가진 데이터셋에 대해 IQR을 얻는 방법의 예를 보여줍니다.

Tukey Fences에서 이상치(outlier)는 다음과 같은 값입니다.

  • Q1 - (1.5 * IQR) 미만 or
  • Q3 + (1.5 * IQR) 초과

다음 스니펫 코드는 파이썬을 사용해 Tukey Fences를 실행하는 방법을 보여줍니다.

>>> import numpy as np
>>> def outliers_iqr(data):
              q1, q3 = np.percentile(data, [25, 75])
              iqr = q3 - q1
              lower_bound = q1 - (iqr * 1.5)
              upper_bound = q3 + (iqr * 1.5)
              return np.where((data > upper_bound) | (data < lower_bound))

np.where() 함수는 조건에 만족하는 아이템들의 위치를 반환합니다. 

outliers_iqr() 함수는 첫 번째 요소가 이상치(oulier)값을 갖는 행의 인덱스 배열인 튜플을 반환합니다.

Tukey Fences를 테스트하기 위해, 부모와 자녀의 키에 대해 유명한 Galton 데이터셋을 사용해 보도록 하겠습니다. 

이 데이터셋에는 Francis Galton이 1885년에 실시한 유명한 아동 연구결과를 기반으로 한 데이터가 포함되어 있습니다. 

각각의 경우는 성인용이며 변수는 다음과 같습니다.

  • Family : 자녀가 속한 가족으로서 1에서 204 사이의 숫자와 136A로 표시됩니다.
  • Father : 아빠의 키(인치)
  • Mother : 엄마의 키(인치)
  • Gender : 아이들의 성, 남성(M) 또는 여성(F)
  • Height : 아이들의 키(인치)
  • Kids : 아이들의 가정에서, 아이들의 숫자

이 데이터셋은 898 케이스를 갖고 있습니다. 

먼저 데이터를 읽어들입니다:

>>> import pandas as pd
>>> df = pd.read_csv('http://www.mosaic-web.org/go/datasets/galton.csv')
>>> df.head()

height 컬럼에서 이상치(outlier)를 찾고 싶다면, 다음과 같이 outliers_iqr() 함수를 불러옵니다.

>>> print('Outliers using ourliers_iqr()')
>>> print('=====================')
>>> for i in outliers_iqr(df.height)[0]:
                 print(df[i:i+1])

다음과 같은 결과를 볼 수 있습니다:

Tukey Fences 메서드를 사용해, height 컬럼에 하나의 이상치(outlier)가 있다는 것을 알 수 있었습니다.

Z-Score

이상치(outlier)를 결정하는 두번째 방법은 Z-Score 메서드를 사용하는 것입니다. 

Z-Score는 데이터 포인트가 평균에서 얼마나 많은 표준 편차를 가지는지 나타냅니다.

Z-Score의 공식은 다음과 같습니다.

여기서 xi는 데이터 포인트, μ는 데이터셋의 평균, σ는 표준편차입니다.

  • 음의 Z-Score는 데이터 포인트가 평균보다 작음을 나타내고 양의 Z-Score는 문제의 데이터 포인트가 평균보다 큰 것을 나타냅니다.
  • Z-Score가 0이면 데이터 포인트가 중간(평균)이고 Z-Score가 1이면 데이터 포인트가 평균보다 1 표준편차가 높다는 것을 알 수 있습니다.
  • 3보다 크거나 -3보다 작은 모든 Z-Score는 이상치(outlier)로 간주됩니다.

다음 스니펫 코드는 파이썬을 사용해 Z-Score를 실행하는 방법을 보여줍니다.

>>> def outliers_z_score(data):
           threshold = 3
           mean = np.mean(data)
           std = np.std(data)
           z_scores = [(y - mean) / std for y in data]
           return np.where(np.abs(z_scores) > threshold)

이전에 사용한 것과 동일한 Galton 데이터셋에 대해 outliers_z_score()함수를 사용해 height 컬럼에 대한 이상치(outlier)를 찾을 수 있습니다.

>>> print('Outliers using ourliers_z_score()')
>>> print('=========================')
>>> for i in outliers_z_score(df.height)[0]:
                 print(df[i:i+1])

다음과 같은 결과물을 볼 수 있습니다.

Z- Score 메서드를 사용하면 height 컬럼에 3개의 이상치(outlier)가 있음을 알 수 있습니다.

(Source : Python Machine Learning, Wiley, 2019)

반응형

+ Recent posts