예측 등락률을 classifier로 바꿔봤다.

2023. 8. 14. 10:48프로젝트/주식분석_기사제목

반응형

예측 등락률을 classifier로 바꿨다. 감성분류도 -1, 0, 1로 바꿔볼까..? 우선 예측 등락률만 바꿔봤다.

df_joined['예측_등락률'] = df_joined['예측_등락률'].apply(lambda x: 1 if x > 0.1 else (-1 if x < -0.1 else 0))

apply lambda를 사용해서 이런 식으로 진행했다.

그랬더니 0.065가 나옴! 오;; 성과인가?

 

positive_lexicon = ['러브', '콜', '만점', '만점', '상승', '회복', '적극', '정착', '세계최초','강세','보상','잘 만들다','정확하다','칭찬','응원','좋은','소중한','가능하다','강화하다','신뢰','민생안정','대응전략','극복방안','복원력','방도','안정화','규제','동참','안정','표심잡기','끝내기','MOU', '제휴', '주목', '호응', '돌파', '이목', '수상', '입점', '인기', '열풍', '진화', '대박', '순항', '유치', '1위', '출시', '선보여', '오픈', '팝업', '돌풍', '팝업스토어', '인싸', '줄서서', '인기', '대세', '트렌드', '불티', '진출', '부상', '체결', '증가', '봉사', '기부', '신메뉴', '신제품', '신상', '최고', '새로운', '편한', '미소', '맛집', '착한가게', '순항', '착한', '제작지원','성과' ,'키운다', '역발상', '기회', '잡', '가즈', '진격', '획득', '단독', '협력', '추진', '가속', '조성', '달성', '협약', '수출', '투자', '공급', '글로벌', '기대', '개막', '계약', '양성', '매수', '개최','좋','자리매김','연다','훨훨','구축','오른', '상승', '착수', '신사업','순 매수']
negative_lexicon = ['쪼들리', '매각', '강등', '망신','괴담','노골적','가짜','날치기','터무니없다','실적악화','진퇴양난','경제침체','대재난','비상사태','내수시장','실직','황폐화','제살 깎아먹기','제식구 감싸기','말바꾸기','말맞추기','부풀리기','퍼나르기','버티기','수박겉핥기','겨자먹기','먼지털기','퍼주기','갑질', '논란', '폭리', '허위', '과징금', '눈물', '피해', '포화', '우롱', '위반', '리스크', '사퇴', '급락', '하락', '폐업', '불만', '산재', '닫아', '손배소', '구설수', '폐점', '적발', '침해', '빨간불', '취약', '불명예', '분신', '구형', '기소', '반토막', '호소', '불매', '냉담', '문제', '직격탄', '한숨', '불똥', '항의', '묵묵부담', '싸늘', '일탈', '파문', '게이트', '횡령', '사과문', '여파', '울상', '초토화', '급감', '우려', '중단', '퇴출', '해지', '일베', '이물질', '벌레', '엉망', '적발', '위생불량', '위생엉망', '소송', '하락', '매출하락', '반토막', '혐의', '불매', '부채', '적발', '폭리', '과징금', '오너리스크', '매각', '포기', '불만','깨졌' ,'손실' ,'부진', '적자', '휘청', '줄어든', '빠져', '↓', '과잉', '빨간', '암울', '경고', '어렵', '가뭄', '너무']

def analyze_sentiment(morphemes, positive_lexicon, negative_lexicon):
    positive_count = sum(word in positive_lexicon for word in morphemes)
    negative_count = sum(word in negative_lexicon for word in morphemes)
    
    
    if positive_count > negative_count:
        return '1'
    elif positive_count < negative_count:
        return '-1'
    else:
        return '0'

df['감성분류'] = [analyze_sentiment(test_text_preprocessing(title, mecab), positive_lexicon, negative_lexicon) for title in df['제목']]

df.head()

내친김에 임의로 설정했던 이것도 한 번 바꿔보기로 했다. 원래는 negative_count 많으면 0으로 하기로 했는데 주식 수치 상 보합도 있을 수 있으니까 0도 추가하면 좋을 것 같아서 이런 식으로 바꿨다.

 

근데 값은 같았다. 그리고 의심이 좀 드는게, 0.65가 좀 이상해서.. 재현율, 정밀도를 돌려봤다.

망한거 아니냐 이거..? 어떻게 살리지... 또 멘붕이 온다. 피처를 추가해야하나...

728x90