데이터사이언스
-
추천시스템 이해데이터사이언스/데이터 분석 2024. 3. 17. 18:07
기본적인 추천시스템은 어떤 행렬(데이터)을 사용했는지와 어떻게 분석했는지로 구분할 수 있다. ex) 영화 추천 시스템 콘텐츠 기반 추천시스템(Content-based Filtering, CB): 행에는 영화제목이, 열에는 영화 속성이 있는 행렬을 사용한다. (==각 영화를 설명하는 행렬) → A와 비슷한 영화는 A’입니다. 비슷한 영화를 계산하는 대표적인 방법으로 코사인 유사도가 있다. 협업 필터링 추천시스템(Collaborative Filtering, CF): 행에는 영화제목이, 열에는 사용자 개개인이 기록된 행렬을 사용한다. (==각 영화에 대한 평점을 기록한 희소행렬) → 아직 관람하지 않은 영화 B의 예측 평점은 5점입니다. 이와 반대로 행에는 사용자, 열에는 영화제목이 있는 행렬도 사용가능하다...
-
데이터 전처리, 무엇부터 해야할까?데이터사이언스/질문과 답변 2023. 2. 28. 17:40
데이터 전처리는 데이터분석에 지대한 영향을 미치는 요인입니다. 모델과, 데이터의 종류에 따라 처리해야할 것들이 다양합니다. 무엇부터 해야할까요? 일반적으로 데이터를 로드 했을 때, 어떤 순서로 데이터에 접근하면 좋을 지 표로 정리해보았습니다. 데이터 전처리 순서, 1번 부터 14번 까지 : ------- Drop 결측치 이상치 Scaling 자료형 변환 인코딩 타겟 (y) 1번 2번 3번 4번 피처(x) 실수형 피처 5번 7번 8번 9번 10번 범주형 피처 6번 11번 12번 13번 14번 각 처리에서 유의할 점 Drop. 같은 변수인데 중복되었을 경우 삭제합니다. 분석에 전혀 상관없는 변수를 삭제합니다. (ex. x3 = x1+x2) 이 단계에서 변수간에 상관관계를 의심하고 데이터가 저장된 자료형을 확..
-
머신러닝(분류): 신용카드 사기 검출 분석데이터사이언스/데이터 분석 2023. 2. 28. 15:42
데이터 소개 : European Card의 사용 내역으로 생성된 데이터.총 거래내역 284,807건 중에서 사기 당한 표본은 492건. (0.172%로 매우 희박함)변수 V1~V28은 거래내역의 개인정보 문제로 PCA된 변수. 출처: https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud Credit Card Fraud DetectionAnonymized credit card transactions labeled as fraudulent or genuinewww.kaggle.com 분석 목적: 신용카드 사기를 예측하는 분류 모델 구축모든 거래가 정상이라고 예측하는 모델도 정확도는 99.828.따라서 실제 사기를 사기라고 판단한 "재현율" 지표가 중요함라..
-
ROC곡선은 왜 그렇게 생겼을까? (정밀도와 정확도의 차이)데이터사이언스/질문과 답변 2023. 2. 27. 17:47
※ 주관적인 상상력이 개입된 설명을 포함하고 있습니다. 이 문서를 읽기전에, 오분류표의 의미가 기억나지 않는 분들은 위키백과를 참조해주세요. https://ko.wikipedia.org/wiki/%EC%A0%95%EB%B0%80%EB%8F%84%EC%99%80_%EC%9E%AC%ED%98%84%EC%9C%A8 오분류표와 ROC곡선은 다음과 같이 생겼습니다. 이것들은 모두 "분류(classification)" 모델의 성능을 평가하는 도구입니다. (분류 모델은 예를들어 어떤 동물 사진을 입력하면 개 or 고양이로 동물을 맞춘다거나 어떤 사람의 특성을 바탕으로 시험 합격 or 불합격을 예측하는 등의 일을 수행합니다.) 즉, 이것들은 반응(종속)변수가 범주형인 모델의 성능을 평가하는 지표입니다. 결론부터 말하자..
-
유용한 파이썬 코드 모음 (데이터 분석)데이터사이언스/데이터 분석 2023. 2. 24. 18:26
데이터를 분석할 때 자주 생각나는 코드들을 하나씩 모으고 있습니다. 최종목표는 데이터 분석 템플릿 수준으로 확장하기 입니다. 계속 업데이트 하겠습니다. Seed 고정 import numpy as np import random import os def seed_everything(seed: int = 24): random.seed(seed) np.random.seed(seed) os.environ["PYTHONHASHSEED"] = str(seed) seed_everything(24) 기본 모듈 import import numpy as np import pandas as pd import datetime import holidays import matplotlib.pyplot as plt import se..
-
데이터베이스의 구조가 중요할까?데이터사이언스/질문과 답변 2023. 2. 24. 18:05
데이터베이스의 가장 큰 특징은 "함수가 아니다." 라는 것입니다 데이터베이스는 수학처럼 참과 거짓을 반환하지 않습니다. 데이터베이스는 통계처럼 확률과 오류의 가능성을 반환하지 않습니다. 데이터베이스는 One to Many의 릴레이션을 지향합니다. DB사용자가 '영화를 보여줘'라는 쿼리를 입력하면 DB는 셀 수 없는 경우의 수로 답을 내놓을 수 있습니다. 무한한 가능성의 도구를 적절히 사용하기 위해선 그에 걸맞는 제약조건(constraint)이 필요할 것입니다. 그 제약조건들을 구현하면서, 동시에 필요한 테이블을 모두 보유하는 - 가장 간단한 구조가 이상적인 데이터베이스 디자인이라고 할 수 있습니다. 데이터베이스 구조를 디자인했던 저의 예시를 통해 더 자세히 알려드리겠습니다. 제 데이터베이스의 목표는 카카..
-
시계열 데이터에 대한 ARIMA 모델 with R데이터사이언스/데이터 분석 2023. 2. 22. 19:10
총 두 가지의 데이터에 대하여 ARIMA모델을 적합해보았다. 화학반응의 결과물에 대한 시간 별 데이터 (n=197) 미국의 실업자에 관한 월 별 데이터 (n=500) 분석목적: 시간에 따라 측정된 두 종류의 시계열 데이터에 대하여 자주 사용되는 ARIMA(p,d,q)모델을 적합하고 자귀회귀계수(p), 차분계수(d), 이동평균계수(q)를 추정한다. 경우에 따라 계절성이 관측되면, seasonal ARIMA(p,d,q)(P,D,Q)[m] 모델을 사용하기로 한다. 첫 번째 데이터 : Chemical process concentration readings: Every two hours (n = 197) - ACF가 천천히 감소한다고 판단된다.(-> 비정상성) 차분을 적용한다. ACF는 cut off after ..
-
딥러닝(CNN)을 이용한 음성분류데이터사이언스/데이터 분석 2023. 2. 21. 16:28
데이터 소개 : 텐서플로우에서 발행한 음성탐지 모델용 데이터. 30개의 영어 단어(yes, no, up, down 등)에 대해 1초 분량으로 기록한 65,000개의 데이터 세트 출처 : https://www.kaggle.com/c/tensorflow-speech-recognition-challenge 분석 목적 : 캐글 competition 에 사용되는 test 단어 10가지에 대하여 CNN을 이용한 분류모델 학습과 예측성능 평가. 10가지 단어의 데이터 샘플 수는 21312개. 의의: 음성 데이터 전처리의 중요성을 실감함 (검색 추천 키워드: "MFCC" ) 딥러닝을 활용한 엔지니어링 프로세스와, 기본적인 모델 구조에 대한 이해 모델 요약 : In [1]: import os for dirname, _,..
-
이미지에 대한 PCA와 클러스터링, LDA데이터사이언스/데이터 분석 2023. 2. 21. 15:34
Handwritten digit image data에 대한 다변량 분석 데이터 소개: 업로드된 train.7.txt, train.9.txt는 미국 우체국에서 손으로 쓰여진 우편번호 중 digit “7”과 “9”를 스캔한 이미지를 각각 645, 644개씩 포함하며, 각 이미지는 16 × 16 grayscale matrix로 표현되어 있다. 분석 목적: (i) 주성분 분석을 통한 저차원에서의 이미지 표현 (ii) 군집분석 (iii) 판별분석을 통한 각 digit 분류 rm(list=ls()) #객체 제거 options(digits=4) library(MASS) data.7 = read.csv("train.7.txt", header = F) #데이터를 불러와라 data.7 = as.matrix(data.7) ..