{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "dcba9de7-327b-425a-81c8-22bebfdf88ca", "metadata": {}, "source": [ "# __AutoML을 사용하여 분류 모델 만들기__" ] }, { "attachments": {}, "cell_type": "markdown", "id": "6a5d9f51", "metadata": {}, "source": [ "- 튜토리얼 난이도: ★☆☆☆☆\n", "- 읽는데 걸리는 시간: 4 분\n", "- 사용 언어: [SQL](https://ko.wikipedia.org/wiki/SQL) (100%)\n", "- 실행 파일 위치: tutorial/thanosql_ml/classification/automl_classification.ipynb\n", "- 참고 문서: [(캐글) Titanic - Machine Learning from Disaster](https://www.kaggle.com/competitions/titanic/overview)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "b9d4488f", "metadata": { "tags": [] }, "source": [ "## 튜토리얼 소개\n", "\n", "
\n", "

분류 작업 이해하기

\n", "

분류 작업은 목푯값(Target)이 속한 범주(Category 또는 Class)를 예측하기 위해 사용하는 머신러닝(기계학습/Machine Learning)의 한 형태입니다. 예를 들어, 남성 또는 여성을 분류하는 이진 분류와 동물의 종(개, 고양이, 토끼 등)을 예측하는 다중 분류 모두 분류 작업에 포함됩니다.

\n", "
\n", "\n", "기업의 특정 마케팅 프로모션에 대해 잠재고객이 긍정적인 반응을 보일 것인지 아닌지를 예측하기 위해서는 고객의 [CRM(Customer Relationship Management)](https://ko.wikipedia.org/wiki/%EA%B3%A0%EA%B0%9D_%EA%B4%80%EA%B3%84_%EA%B4%80%EB%A6%AC) 데이터(인구 통계학 정보, 고객의 행동/검색 데이터 등)를 이용할 수 있습니다. 이 경우 CRM 데이터에서 표현되는 특성(Feature)이 입력 데이터로 사용되며, 예측하고자 하는 값인 목푯값은 프로모션에 대한 대상 고객의 반응이 긍정(1 또는 True) 또는 부정(0 또는 False)일지 여부입니다. 이러한 분류 모델을 이용해서, 마케팅에 노출되지 않은 고객들의 프로모션에 대한 반응을 미리 예측하고 적절한 고객에게 마케팅을 노출함으로써 마케팅 효율을 지속적으로 높일 수 있습니다.\n", "\n", "__아래는 ThanoSQL 분류 모델의 활용 및 예시입니다.__\n", "\n", "- 분류 모델은 현재 사용자의 이탈에 대한 조기 탐지를 가능하게 하고 문제(이탈)에 사전에 대등할 수 있도록 해줍니다. 과거 데이터를 통해 이탈 고객의 특성을 파악할 수 있게 되고 이탈 가능성이 높은 사용자를 사전에 발견함으로써 적절한 조치가 가능해집니다. 이를 통해 고객이탈 방지 및 매출 증대 효과를 기대할 수 있습니다.\n", "- 온라인 플랫폼 내에서 사용자의 [세그먼트](https://ko.wikipedia.org/wiki/%EC%8B%9C%EC%9E%A5%EC%84%B8%EB%B6%84%ED%99%94)를 예측할 수 있습니다. 대부분의 서비스 사용자들은 서로 다른 특성을 가지고 다양한 행동방식(User Behaviour)과 니즈(Needs)를 가지고 있습니다. 분류 예측 모델은 서비스 사용자의 특성을 이용하여 세분화된 집단을 식별하고 그들에게 맞춤화된 전략 수립을 가능하게 합니다.\n", "\n", "
\n", "

본 튜토리얼에서는

\n", "

👉 대표적인 머신러닝 경진대회 플랫폼인 캐글의 입문자를 위한 Titanic: Machine Learning from Disaster 데이터 세트를 사용하여 생존자 예측 분류 모델을 만듭니다. 이 대회의 목표는 아래와 같습니다. (참고로, 해당 대회의 데이터는 1912년 4월 15일 실제 타이타닉 사건 때, 탑승했었던 승객들 명단입니다.)

\n", "
\n", "\n", "__타이타닉에서 살아남을 수 있는 승객을 예측하기__\n", "\n", "ThanoSQL에서는 자동화된 머신러닝(__AutoML__) 도구를 제공합니다. 본 튜토리얼에서는 AutoML을 사용하여 타이타닉에서 살아남을 수 있는 승객을 예측합니다. ThanoSQL에서 제공하는 AutoML은 모델(Model)개발을 위한 프로세스를 자동화하고, 데이터 과학(Data Science)에 대한 전문지식이 없어도 데이터의 수집 및 저장, 머신러닝 모델의 개발 및 배포(엔드투엔드 머신러닝 파이프라인)를 하나의 언어(ThanoSQL)만으로 가능하도록 지원합니다.\n", "\n", "__자동화된 ML을 사용하면 다음과 같은 장점이 있습니다__\n", "\n", "1. 광범위한 프로그래밍 또는 데이터 과학에 대한 지식이 없어도 머신러닝 솔루션의 구현 및 배포가 가능\n", "2. 개발모델의 배포에 들어가는 시간 및 리소스를 절약\n", "3. 의사결정을 위해 보유하고 있는 데이터를 이용한 신속한 문제해결이 가능\n", "\n", "이제부터 ThanoSQL을 사용하여 간단하게 타이타닉에서 살아남을 수 있는 승객을 예측하는 분류 모델을 만들어 봅니다." ] }, { "attachments": {}, "cell_type": "markdown", "id": "1051840d-421e-4cab-9629-bcf6e37b7db6", "metadata": {}, "source": [ "## __0. 데이터 세트 준비__\n", "\n", "ThanoSQL의 쿼리 구문을 사용하기 위해서는 [ThanoSQL 워크스페이스](https://docs.thanosql.ai/1.4/ko/getting_started/paas/workspace/lab/)에서 언급된 것처럼 API 토큰을 생성하고 아래의 쿼리를 실행해야 합니다." ] }, { "cell_type": "code", "execution_count": null, "id": "32fbea16-ab9a-45cb-948b-dfecf06902a0", "metadata": { "tags": [] }, "outputs": [], "source": [ "%load_ext thanosql\n", "%thanosql API_TOKEN=<발급받은_API_TOKEN>" ] }, { "attachments": {}, "cell_type": "markdown", "id": "a3fc89e5-600a-4c5f-bba2-289a425db405", "metadata": {}, "source": [ "### __데이터 세트 준비__" ] }, { "cell_type": "code", "execution_count": 2, "id": "ad07a885-ee2e-4eeb-a2f0-634af9b3b843", "metadata": { "execution": { "iopub.execute_input": "2023-01-19T10:04:17.240126Z", "iopub.status.busy": "2023-01-19T10:04:17.239389Z", "iopub.status.idle": "2023-01-19T10:04:18.511731Z", "shell.execute_reply": "2023-01-19T10:04:18.511013Z", "shell.execute_reply.started": "2023-01-19T10:04:17.240106Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Success\n" ] } ], "source": [ "%%thanosql\n", "GET THANOSQL DATASET titanic_data\n", "OPTIONS (overwrite=True)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "77319ae0", "metadata": {}, "source": [ "
\n", "

쿼리 세부 정보

\n", " \n", "
" ] }, { "cell_type": "code", "execution_count": 3, "id": "c7b0c89c-8bdb-4065-9394-6f57e33be899", "metadata": { "execution": { "iopub.execute_input": "2023-01-19T10:04:18.512535Z", "iopub.status.busy": "2023-01-19T10:04:18.512335Z", "iopub.status.idle": "2023-01-19T10:04:19.569295Z", "shell.execute_reply": "2023-01-19T10:04:19.568648Z", "shell.execute_reply.started": "2023-01-19T10:04:18.512519Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Success\n" ] } ], "source": [ "%%thanosql\n", "COPY titanic_train\n", "OPTIONS (if_exists='replace')\n", "FROM 'thanosql-dataset/titanic_data/titanic_train.csv'" ] }, { "cell_type": "code", "execution_count": 4, "id": "26e63b28-7b06-4378-a789-2c56929df59a", "metadata": { "execution": { "iopub.execute_input": "2023-01-19T10:04:19.570294Z", "iopub.status.busy": "2023-01-19T10:04:19.570115Z", "iopub.status.idle": "2023-01-19T10:04:20.641523Z", "shell.execute_reply": "2023-01-19T10:04:20.640735Z", "shell.execute_reply.started": "2023-01-19T10:04:19.570277Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Success\n" ] } ], "source": [ "%%thanosql\n", "COPY titanic_test\n", "OPTIONS (if_exists='replace')\n", "FROM 'thanosql-dataset/titanic_data/titanic_test.csv'" ] }, { "attachments": {}, "cell_type": "markdown", "id": "f7db4f06", "metadata": {}, "source": [ "
\n", "

쿼리 세부 정보

\n", " \n", "
" ] }, { "attachments": {}, "cell_type": "markdown", "id": "eff7350d-3b29-44a2-84d6-132d3b41a989", "metadata": {}, "source": [ "## __1. 데이터 세트 확인__\n", "\n", "분류 모델을 만들기 위해 ThanoSQL 워크스페이스 데이터베이스에 저장되어 있는 __titanic_train__ 테이블을 사용합니다. 아래의 쿼리 구문을 실행하고 테이블의 내용을 확인합니다." ] }, { "cell_type": "code", "execution_count": 5, "id": "14b95522-168a-482c-a039-5af17deafc6a", "metadata": { "execution": { "iopub.execute_input": "2023-01-19T10:04:20.643296Z", "iopub.status.busy": "2023-01-19T10:04:20.643097Z", "iopub.status.idle": "2023-01-19T10:04:21.611191Z", "shell.execute_reply": "2023-01-19T10:04:21.610518Z", "shell.execute_reply.started": "2023-01-19T10:04:20.643280Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
passengeridsurvivedpclassnamesexagesibspparchticketfarecabinembarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NoneS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NoneS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NoneS
\n", "
" ], "text/plain": [ " passengerid survived pclass \\\n", "0 1 0 3 \n", "1 2 1 1 \n", "2 3 1 3 \n", "3 4 1 1 \n", "4 5 0 3 \n", "\n", " name sex age sibsp \\\n", "0 Braund, Mr. Owen Harris male 22.0 1 \n", "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", "2 Heikkinen, Miss. Laina female 26.0 0 \n", "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", "4 Allen, Mr. William Henry male 35.0 0 \n", "\n", " parch ticket fare cabin embarked \n", "0 0 A/5 21171 7.2500 None S \n", "1 0 PC 17599 71.2833 C85 C \n", "2 0 STON/O2. 3101282 7.9250 None S \n", "3 0 113803 53.1000 C123 S \n", "4 0 373450 8.0500 None S " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%thanosql\n", "SELECT *\n", "FROM titanic_train\n", "LIMIT 5 " ] }, { "attachments": {}, "cell_type": "markdown", "id": "cd8c9617", "metadata": {}, "source": [ "
\n", "

데이터 테이블 이해하기

\n", "

tianic_train 테이블은 아래와 같은 정보를 담고 있습니다.

\n", " \n", "
\n", "\n", "이번 튜토리얼에서는 추가적인 쿼리문을 이용한 데이터 전처리가 필요한 name, ticket, cabin, passengerid컬럼을 제외하고 모델 학습을 진행하겠습니다." ] }, { "attachments": {}, "cell_type": "markdown", "id": "af169f51-b815-4230-b398-2f9f3e46b7bd", "metadata": {}, "source": [ "## __2. 분류 모델 생성__\n", "\n", "이전 단계에서 확인한 __titanic_train__ 테이블을 사용하여 생존자 예측 분류 모델을 만듭니다. 아래의 쿼리 구문을 실행하여 titanic_automl_classification이라는 이름의 모델을 만듭니다. \n", "(쿼리 실행 시 예상 소요 시간: 8 min)" ] }, { "cell_type": "code", "execution_count": 6, "id": "2fb6601a-81af-4c99-af73-4c6894e0ac72", "metadata": { "execution": { "iopub.execute_input": "2023-01-19T10:04:21.611967Z", "iopub.status.busy": "2023-01-19T10:04:21.611804Z", "iopub.status.idle": "2023-01-19T10:09:29.733092Z", "shell.execute_reply": "2023-01-19T10:09:29.732332Z", "shell.execute_reply.started": "2023-01-19T10:04:21.611951Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Success\n" ] } ], "source": [ "%%thanosql\n", "BUILD MODEL titanic_automl_classification\n", "USING AutomlClassifier\n", "OPTIONS (\n", " target_col='survived',\n", " impute_type='iterative',\n", " features_to_drop=['name', 'ticket', 'passengerid', 'cabin'],\n", " time_left_for_this_task=300,\n", " overwrite=True\n", " )\n", "AS\n", "SELECT *\n", "FROM titanic_train" ] }, { "attachments": {}, "cell_type": "markdown", "id": "6b0fce36", "metadata": {}, "source": [ "
\n", "

쿼리 세부 정보

\n", " \n", "
" ] }, { "attachments": {}, "cell_type": "markdown", "id": "63a96457-78da-4d01-a760-953febcf08cd", "metadata": {}, "source": [ "## __3. 생성된 모델 평가__\n", "\n", "아래의 쿼리문을 실행하여 이전 단계에서 만든 예측 모델의 성능을 평가합니다." ] }, { "cell_type": "code", "execution_count": 7, "id": "67159796-2489-4576-942d-5939f24d962f", "metadata": { "execution": { "iopub.execute_input": "2023-01-19T10:09:29.734111Z", "iopub.status.busy": "2023-01-19T10:09:29.733922Z", "iopub.status.idle": "2023-01-19T10:09:31.790317Z", "shell.execute_reply": "2023-01-19T10:09:31.789716Z", "shell.execute_reply.started": "2023-01-19T10:09:29.734094Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
metricscore
0Accuracy0.923681
1ROCAUC0.927237
2Recall0.939103
3Precision0.856725
4F1-Score0.896024
5Kappa0.835941
6MCC0.838139
\n", "
" ], "text/plain": [ " metric score\n", "0 Accuracy 0.923681\n", "1 ROCAUC 0.927237\n", "2 Recall 0.939103\n", "3 Precision 0.856725\n", "4 F1-Score 0.896024\n", "5 Kappa 0.835941\n", "6 MCC 0.838139" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%thanosql \n", "EVALUATE USING titanic_automl_classification\n", "OPTIONS (\n", " target_col='survived'\n", " )\n", "AS\n", "SELECT *\n", "FROM titanic_train" ] }, { "attachments": {}, "cell_type": "markdown", "id": "b4df22cc", "metadata": {}, "source": [ "
\n", "

쿼리 세부 정보

\n", " \n", "
\n", "\n", "
\n", "

평가용 데이터 세트

\n", "

평가용 데이터 세트는 학습 데이터 세트의 일부를 분리하여 학습에 사용되지 않아야 하나 튜토리얼에서는 편의상 학습 데이터를 사용합니다

\n", "
" ] }, { "attachments": {}, "cell_type": "markdown", "id": "aa047726-113b-48ae-8247-135a37592945", "metadata": {}, "source": [ "## __4. 생성된 모델을 사용하여 생존자 예측__\n", "\n", "이전 단계에서 생성한 생존자 예측 모델을 사용해 탑승 승객 정보에 따른 생존 여부를 예측해 봅니다. 테스트용 데이터 세트(학습에 이용되지 않은 데이터 테이블, titanic_test)를 사용합니다." ] }, { "cell_type": "code", "execution_count": 8, "id": "1df25db0-3352-4893-b0af-6e10cea8f7b0", "metadata": { "execution": { "iopub.execute_input": "2023-01-19T10:09:31.791213Z", "iopub.status.busy": "2023-01-19T10:09:31.791040Z", "iopub.status.idle": "2023-01-19T10:09:33.569492Z", "shell.execute_reply": "2023-01-19T10:09:33.568770Z", "shell.execute_reply.started": "2023-01-19T10:09:31.791198Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
passengeridpclassnamesexagesibspparchticketfarecabinembarkedpredict_result
08923Kelly, Mr. Jamesmale34.5003309117.8292NoneQ0
18933Wilkes, Mrs. James (Ellen Needs)female47.0103632727.0000NoneS0
28942Myles, Mr. Thomas Francismale62.0002402769.6875NoneQ0
38953Wirz, Mr. Albertmale27.0003151548.6625NoneS0
48963Hirvonen, Mrs. Alexander (Helga E Lindqvist)female22.011310129812.2875NoneS0
.......................................
41313053Spector, Mr. WoolfmaleNaN00A.5. 32368.0500NoneS0
41413061Oliva y Ocana, Dona. Ferminafemale39.000PC 17758108.9000C105C1
41513073Saether, Mr. Simon Sivertsenmale38.500SOTON/O.Q. 31012627.2500NoneS0
41613083Ware, Mr. FrederickmaleNaN003593098.0500NoneS0
41713093Peter, Master. Michael JmaleNaN11266822.3583NoneC0
\n", "

418 rows × 12 columns

\n", "
" ], "text/plain": [ " passengerid pclass name \\\n", "0 892 3 Kelly, Mr. James \n", "1 893 3 Wilkes, Mrs. James (Ellen Needs) \n", "2 894 2 Myles, Mr. Thomas Francis \n", "3 895 3 Wirz, Mr. Albert \n", "4 896 3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) \n", ".. ... ... ... \n", "413 1305 3 Spector, Mr. Woolf \n", "414 1306 1 Oliva y Ocana, Dona. Fermina \n", "415 1307 3 Saether, Mr. Simon Sivertsen \n", "416 1308 3 Ware, Mr. Frederick \n", "417 1309 3 Peter, Master. Michael J \n", "\n", " sex age sibsp parch ticket fare cabin embarked \\\n", "0 male 34.5 0 0 330911 7.8292 None Q \n", "1 female 47.0 1 0 363272 7.0000 None S \n", "2 male 62.0 0 0 240276 9.6875 None Q \n", "3 male 27.0 0 0 315154 8.6625 None S \n", "4 female 22.0 1 1 3101298 12.2875 None S \n", ".. ... ... ... ... ... ... ... ... \n", "413 male NaN 0 0 A.5. 3236 8.0500 None S \n", "414 female 39.0 0 0 PC 17758 108.9000 C105 C \n", "415 male 38.5 0 0 SOTON/O.Q. 3101262 7.2500 None S \n", "416 male NaN 0 0 359309 8.0500 None S \n", "417 male NaN 1 1 2668 22.3583 None C \n", "\n", " predict_result \n", "0 0 \n", "1 0 \n", "2 0 \n", "3 0 \n", "4 0 \n", ".. ... \n", "413 0 \n", "414 1 \n", "415 0 \n", "416 0 \n", "417 0 \n", "\n", "[418 rows x 12 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%thanosql \n", "PREDICT USING titanic_automl_classification\n", "OPTIONS (\n", " result_col='predict_result'\n", " )\n", "AS\n", "SELECT *\n", "FROM titanic_test" ] }, { "attachments": {}, "cell_type": "markdown", "id": "a0ef3104", "metadata": {}, "source": [ "
\n", "

쿼리 세부 정보

\n", " \n", "
" ] }, { "attachments": {}, "cell_type": "markdown", "id": "b2f2da2f", "metadata": {}, "source": [ "## __5. 튜토리얼을 마치며__\n", "\n", "이번 튜토리얼에서는 [캐글](https://www.kaggle.com/)의 Titanic: Machine Learning from Disaster 데이터 세트를 사용하여 타이타닉 생존자 분류 예측 모델을 만들어 보았습니다. 초급 단계 튜토리얼인만큼 정확도 향상을 위한 과정보다는 전반적인 프로세스 위주의 설명으로 진행 하였습니다.\n", "\n", "* [나만의 데이터 업로드하기](https://docs.thanosql.ai/1.4/ko/getting_started/data_upload/)\n", "* [나만의 데이터 테이블 생성하기](https://docs.thanosql.ai/1.4/ko/how-to_guides/ThanoSQL_query/COPY_SYNTAX/)\n", "* [나만의 모델 업로드하기](https://docs.thanosql.ai/1.4/ko/how-to_guides/ThanoSQL_query/UPLOAD_MODEL_SYNTAX/)\n", "\n", "
\n", "

나만의 서비스를 위한 모델 배포 관련 문의

\n", "

ThanoSQL을 활용해 나만의 모델을 만들거나, 나의 서비스에 적용하는데 어려움이 있다면 언제든 아래로 문의주세요😊

\n", "

분류 모델 구축 관련 문의: contact@smartmind.team

\n", "
" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.13" }, "vscode": { "interpreter": { "hash": "54a1ec72395a4a5a649013bb47cb6c1a711fb4b3d33a07524a09f31d6d2ee0ec" } } }, "nbformat": 4, "nbformat_minor": 5 }