고등학교 인공지능 수학 수업자료 4 (유사도 계산기, 선호도 분석 알고리즘)

 앞서 설명한 코사인 유사도를 기반으로해서 실제로 학생들 개인의 선호도를 분석해보는 수업을 계획했다.

학생들이 유튜브, 넷플릭스 등의 사이트 이용에 익숙하기에 학생들이 흥미도 가질 수 있고 인공지능 알고리즘의 수학적인 원리를 실제로 탐구해 볼 수 있는 아주 좋은 주제다. 인공지능 수학 교과서에 나와있는 강아지나 고양이의 유사도를 계산하는 단순 계산 문제만 풀고 넘어가기에는 너무 아쉬운 단원이다.

넷플릭스는 내가 그동안 추천한 아니면 비추천한 영상을 기반으로 선호도를 분석한다.
쿠팡에서는 내가 최근에 찾아본 제품과 유사도가 높은 제품들을 광고한다.

근데 코사인 유사도를 가지고 이런 개인 선호도를 분석하고 분류하는 실습 수업을 진행하기는 어렵다. 왜냐면 자료의 성분이 많아질 수록 코사인 유사도를 계산하는데에는 많은 시간이 걸리기 때문이다. 어려운것은 아니고 단지 계산해야 할 것이 너무 많고 숫자도 너무 커진다. 그래서 내가 찾아 본 모든 인공지능 수학 교과서에는 손으로 계산해 볼 수 있는 아래 정도의 문제만을 다루고 있다.

미래엔, 고등학교 인공지능수학 (황선욱 외 4인) 69페이지

이런 단순 계산 문제만 풀고 넘어간다면 학생들이 인공지능 수학이라는 교과에 전혀 흥미를 느끼지 못할 것이며 이런 수업 과정에서는 교사가 학생들을 평가할 거리가 전무하기에 세특에 녹일 수 있는 내용을 찾기 어려울 것이다.

그래서 이런 한계를 넘기 위해서는 인공지능 수학 과목은 공학도구의 적절한 사용이 필요하다고 생각한다. 일단 블록코딩으로 구현할까 생각했었는데 일단, 스프레드 시트(엑셀) 프로그램으로 간단히 코사인 유사도 계산기를 만들었다.

(차) 공학적 도구를 활용한 수업을 운영할 때에는 다음 사항에 유의한다.
① 공학적 도구를 활용하여 인공지능 기술을 직접 시연해 볼 수 있는 환경을 제공함으로써 인공지능에 활용되는 수학을 경험할 수 있는 기회를 제공한다.
②공학적 도구로 PC나 모바일 기기를 활용할 수 있으며, 설치형 또는 웹 기반의 소프트웨어를 사용하여 텍스트코딩을 다룰 수 있다.
③ 텍스트코딩을 다룰 때는 학생들이 직관적으로 이해할 수 있는 수준으로 작성된 프로그램의 코드를 제공하여 프로그래밍에 대한 부담을 느끼지 않게 하고, 제공된 프로그램 코드의 숫자를 학생이 부분적으로 수정하면서 자연스럽게 활용할 수 있도록 한다.
"수학과 교육과정 수정(2020.09.11)"

위의 교수 학습 방법에서 말하듯 공학도구를 적절하게 이용하는 것은 좋지만 처음부터 모든 것을 학생들이 만들도록 하면 이건 수학수업이라기 보다는 그냥 프로그래밍 수업이 되기에 주의해야 한다..

https://drive.google.com/file/d/13X8Mmf8OO1u9yXDa90tQQCX_oxC6vwXR/view?usp=sharing


유사도계산기ver1(남궁연).xlsm


drive.google.com

유사도 계산기, 연수 전날에 좀 급하게 만들었다.
Public Function cosyusa(데이터원 As String, 데이터투 As String) As Double
Dim i As Integer
Dim j As Integer
Dim firstV As Integer
Dim secondV As Integer
Dim 데이터원크기 As Double
Dim 데이터투크기 As Double
Dim 데이터원제곱의합 As Double
Dim 데이터투제곱의합 As Double
Dim 내적 As Double
Do While Sheets("데이터테이블").Range("a2").Offset(i) <> ""
    If Sheets("데이터테이블").Range("a2").Offset(i) = 데이터원 Then
        firstV = i
        i = 0
        Exit Do
    End If
    i = i + 1
Loop
Do While Sheets("데이터테이블").Range("a2").Offset(j) <> ""
    If Sheets("데이터테이블").Range("a2").Offset(j) = 데이터투 Then
        secondV = j
        j = 0
        Exit Do
    End If
    j = j + 1
Loop
Do While Sheets("데이터테이블").Range("B2").Offset(, i) <> ""
    데이터원제곱의합 = 데이터원제곱의합 + (Sheets("데이터테이블").Range("b2").Offset(firstV, i)) ^ 2
    데이터투제곱의합 = 데이터투제곱의합 + (Sheets("데이터테이블").Range("b2").Offset(secondV, i)) ^ 2
    내적 = 내적 + Sheets("데이터테이블").Range("b2").Offset(firstV, i) * Sheets("데이터테이블").Range("b2").Offset(secondV, i)
    i = i + 1
Loop
    데이터원크기 = Sqr(데이터원제곱의합)
    데이터투크기 = Sqr(데이터투제곱의합)
   
    '' 이 부분만 학생이 완성하도록 하면 좋겠음!''''''''''''''''''''
    'cosyusa = (코사인 유사도 함수가 반환할값을 직접 구해보자)
    cosyusa = 내적 / (데이터원크기 * 데이터투크기)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End Function

학생들은 코드 중 데이터원크기, 데이터투크기, 내적을 계산하는 수식만 완성하도록 하면 된다.

함수를 완성했으면 이제 cosyusa 라는 사용자 정의 엑셀함수가 하나 만들어 진 것이고 위와 같이 두개의 데이터명을 매개변수로 입력하면 이 두 자료에 대한 코사인 유사도를 계산한다.

 그 다음은 이를 이용하여 실제 자료를 분석하는 것이다. 연수를 하면서 예시를 들기 위해 선생님들께 영화 선호도 설문조사 양식을 보냈고, 취합한 자료를 복사해 유사도 계산기 파일에 붙여넣기 했다. https://forms.gle/sxwcyb5KE6cs8DVe9

구글 설문양식으로 받은 데이터, 실제 자료를 분석할 수 있어 좋다

다음 단계는 [서로의관계는] 시트에 데이터명을 1행과 A열에 붙여넣기 한다. 이때 1행에 붙여넣기 할 때는 아래 그림과 같이 붙여 넣기 옵션 - 바꾸기를 선택하면 편하다.

붙여넣기 옵션 - 바꾸기

이제 수식을 채워 관계표를 완성하자.

위와 같이 입력하기 보다는
$a2, b$1 으로 절대참조를 하면 나머지를 채우기 편하다
셀의 우측하단을 드래그하면 함수를 한번에 채울 수 있다.
홈 - 조건부서식 - 색조

조건부 서식을 이용하면 데이터를 한눈에 시각화 하여 자신과 가장 유사도가 높은 사람은 누군지 가장 낮은 사람은 누군지 분석할 수 있고 이를 기반으로 자신이 안 본 영화가 있을 때 자신과 가장 유사도가 높은 사람의 선호도가 높은 영화를 추천할 수 있음을 알려 줄 수 있다.

성이 남궁씨인 다른 학교 선생님과 나와 유사도가 가장 높게 나왔다 DNA의 힘이다.

학생들에게는 모둠(그룹) 별로 조사해보고 싶은 자료를 선택해서 그 자료에 대한 학급의 학생들의 유사도를 수학적으로 분석해 보도록 할 수 있을 것이다.

이제 다음 단계는 사람을 중심으로 데이터를 분석하는 것이 아니라 거꾸로 영화를 중심으로 어떤 영화가 서로 유사한지를 분석해 보는 것이다.  

댓글

이 블로그의 인기 게시물

시험 감독 시간표를 자동으로 짜는 프로그램

고등학교 반배정 프로그램 (feat. 고교학점제)

New 남궁고사