20.10.27-20.11.14

·2020년 11월 10일
0

project

목록 보기
1/1

머신러닝 프로젝트 마치며...

🤗 소개

<마키아벨리즘 성향에 따른 국가선거 투표여부 예측>

  • 데이콘에 있는 심리성향 예측 AI경진대회의 원본데이터 사용.
  • 머신러닝을 이용해 투표여부를 분류/예측.
    - 사용모델 AdaBoost, GBC, XGB, LGBM
  • 마키아벨리즘 테스트를 통해 점수 산출
    - 평균 이상일 경우 마키아벨리즘 성향이 높다.계산적 신중함
    - 평균 이하일 경우 마키아벨리즘 성향이 낮다. 개인적 감정이입
  • 원본 데이터의 경우 ➡️ 73489 rows × 105 columns
  • 전처리 후 데이터 ➡️ 54718 rows × 108 columns
    - 이상치 제거, 마키아벨리즘 관련 컬럼생성으로 인한 변화

마키아벨리즘이 투표여부에 어떤 영향을 미치는지 확인하고
심리 테스트 데이터와 그 외 인적사항을 이용해 분류모델링 진행!!

🧐 배우고 느낀점

⭐️EDA⭐️ VERY 중요한 과정이다.

  • EDA 100번 강조해도 모자른 과정인듯 하다.
  • 기본이 되는 과정이며, 데이처를 처음 접할 때 필수적으로 거치는 과정
    임에도 불구하고....놓치는 경우가 많음.
  • 이후 모델링 과정에서 정확한 해석을 위해
    데이터를 자세히 살펴보는 과정이 매우 중요함을 뼈져리게 깨달음.
  • 그리고 모델에 학습 후 EDA 로 다시 돌아오는 경우는 엄청 많음..🤭

⭐️시각화⭐️도 VERY 중요한 과정이다.

  • 컬럼이 많고 데이터 수도 많을수록 내가 다루는 데이터를 소개할 때
    시각화만큼 좋은게 없다..!!! 시각화 아니면... 사실 눈에 안들어옴..
  • 우리의 경우 target 포함 컬럼이 105개나 되었다...
    아예 처음 보는 사람에게 소개를 해야한다면...? 😱
  • 생각해보면 우리야 분석하고 뜯어보는 입장이니..
    1~2주간 알게된 데이터를 소개하려면..!! 시각화는 필수다.

🖐 데이터만 들여다 본다고 해석이 되는건 아니다...

컬럼별 분석 그래프 그리면 뭐해... 해석이 되야지?? (독백..)

  • 내 생각엔 여기서 필요한 점이 도메인 지식이라고 생각된다..
  • 우리의 데이터로 예를 들면
    • 마키아벨리즘이란 무엇인가?
    • 마키아벨리즘 테스트지는 어떻게 구성이 되어있는가?
    • 테스트 후 점수측정은 어떻게 이루어지는가?
    • 성향의 높고 낮음은 무엇을 의미하는가?
    • 국가 선거 투표를 예측해야하는데..
    • 데이터에는 어떤 나라들이 있는가?
    • 그 분포는 어떻고, 나라별 투표방법은 어떤가?
      (투표가능여부, 가능 연령 등등.. )
      ...
  • 매우매우 많다... 알아야 해석이 된다...🤭

결론: 도메인 지식 매우 중요하다.

why? 해석해야되니까~

🖐 이상치 처리는 신중해야해

  • 우리가 사용한 데이터는 온라인 상으로 진행된 설문 데이터로
    정말 말그대로 이상한 데이터들이 많았다...😫
    - 나이 컬럼에 1997...
    - 형재자매수 컬럼에 2,147,483,647명...
    - 마키아벨리즘 설문 답변시간에 749602초(약 12,500분)...

그럼 이상치들을 다 제거해야할까...? 🗑

- 전체 데이터 대비 수량이 어느정도인지, 
- 이상치 데이터 중에서도 어떤 질문에서 이상치가 많이 나타나는지,
- 이상치 데이터의 분포와 경향성을 확인한 후 전처리를 진행해야한다~!

🙌 앞으로 채워야 할 점

너무 많아...

  • 자주 사용하는 모델들, 내가 사용할 모델들의 알고리즘이나 원리 이해하기
    - 모델 학습 시, 데이터에 변화를 준 후 결과수치가 바뀌는 이유를 알고싶어서..
  • seaborn, matplotlib 능숙해지기
    - 숫자데이터로 보여주는 것도 중요하지만,
    바쁜 현대사회... 한눈에 보고 파악하기 쉬운 시각화는 아무리 생각해도 필수다.
  • 발표연습하기
    - 고생해서 분석하고 자료준비해서 완성해도...결국 상대에게 전달하는 발표가 하이라이트 인 것 같다..

[20.11.22 추가분]

머신러닝 프로젝트.. 그 후..

프로젝트는 끝났지만 추가로 진행한 과정을 모듈화...!!
해보자는 팀원들의 의견으로... 또 다시 마키아벨리즘 세계로... 😆

그동안 프로젝트를 진행하며 쥬피터노트북에만 익숙했었고..
전체적인 과정도 주피터노트북으로 정리를 해왔다..

스스로 느낀 점이지만...

내가 코딩을 하는게 아니라... 그냥 보고서를 쓰는 느낌이다...!
코딩을... 하는 데 코딩을 하지 않는 것 같은 느낌...?

라고 생각을 했다...

그래서 팀원들과 상의하여 Github 업로드를 위해서라도...
마무리 모듈 작업을 하기로 결정..!! 🎯

😫 클래스.. 모듈.. 알다가도 모를 녀석..

분명히 배우고 이해했지만.. 왜.. 내맘대로 안될까... 이 녀석...
그래도.. 메소드 하나하나 완성할 때의 쾌감은... 이 녀석...😏

사전에 주피터 노트북으로 정리를 해놓은 상태여서
함수로 만드는 것은 어렵지않았으나..!

  • 어떤 순서와 방식으로 동작이 되게 할 것인지에 대한
    프로세스를 정하고 했더라면.. 더 좋았을 것 같다는 생각을 했다.

서로 명확히 구동방식에 대해서 정하지 않고
주피터 노트북의 내용대로 바로 만들기 시작하니...
중간에 연결이 되야하는 부분에서 순탄하게 진행되지 않았던 것 같다...
(그냥 .. 내생각..)

또.. 다시 이야기하고 수정하고 다시 회의하고 수정하며..
조금씩 서로.. 그리고 또... 발전하는 시간을 보냈다.. 😇

역시.. 배울 때와.. 내가 필요해서 직접 사용할 때랑 알게되는 점들이 달랐다.
분명 배웠던 거지만 막상 내가 직접 구현할 때는 맘처럼 되지않았으며,
확실하게 이해했던 부분도.. 잘못 이해하고 있었다..!!


1) 부모클래스에서는 init을 받아와서 쓰고 싶었고,

  • 상속 : 부모클래스의 메소드를 받아와 나의 클래스에 적용하고 싶을 때
    사용하며 이때 나의 클래스가 자식클래스가 된다. super().__init__

➡️ 클래스끼리의 연결은.. 각 단계를 구현한 후 차근차근 이뤄져야하는 단계라는 것을 알게 되었다.. 초반에 생각난 데로 합치려다가 머리가 깨졌다..

2) 자식클래스의 메소드를 실행 시킬 때는 추가로 파라미터를 받아
함수를 실행 시키고 싶었다.

➡️ 이때 내가 아큐먼트, 키워드 아큐먼트 활용을 이제서야 알게되었다..!

profile
매일 코딩하기 & 기록하기

0개의 댓글