[kotlin] 코틀린에서의 조건문과 반복문을 이용한 추천 시스템 구현

본 포스트에서는 코틀린을 사용하여 간단한 추천 시스템을 구현하는 방법에 대해 알아보겠습니다. 추천 시스템은 특정 사용자에게 관련성 높은 아이템을 추천하는데 사용됩니다. 여기서는 간단한 평가 데이터를 사용하여 추천 시스템을 구현할 것입니다.

데이터 구조 정의

가장 먼저, 각 사용자의 아이템 평가 데이터를 저장하기 위한 데이터 구조를 정의해야 합니다. 각 사용자의 평가 데이터는 맵 형태로 저장될 수 있습니다. 예를 들면, 다음과 같습니다.

val userRatings = mapOf(
    "user1" to mapOf("item1" to 4.5, "item2" to 3.0, "item3" to 5.0),
    "user2" to mapOf("item1" to 5.0, "item3" to 4.0),
    "user3" to mapOf("item2" to 2.5, "item4" to 3.5)
)

위의 코드에서 userRatings는 각 사용자의 아이템 평가를 저장하는 맵입니다.

평균 평점 계산

이제, 각 아이템의 평균 평점을 계산하는 함수를 구현합니다. 다음은 간단한 함수의 예시입니다.

fun calculateAverageRatings(userRatings: Map<String, Map<String, Double>>): Map<String, Double> {
    val averageRatings = mutableMapOf<String, Double>()

    for ((item, ratings) in userRatings.flatMap { it.value }) {
        val average = ratings.values.average()
        averageRatings[item] = average
    }

    return averageRatings
}

위의 코드에서 calculateAverageRatings 함수는 각 아이템의 평균 평점을 계산하여 맵 형태로 반환합니다.

추천 알고리즘 구현

마지막으로, 사용자가 아직 평가하지 않은 아이템 중에서 가장 높은 평점을 가진 아이템을 추천하는 함수를 구현합니다. 다음은 간단한 함수의 예시입니다.

fun recommendHighestRatedItem(userRatings: Map<String, Map<String, Double>>, averageRatings: Map<String, Double>, user: String): String? {
    val ratedItems = userRatings[user]?.keys ?: emptySet()
    val unratedItems = averageRatings.keys - ratedItems

    return unratedItems.maxByOrNull { averageRatings.getValue(it) }
}

위의 코드는 recommendHighestRatedItem 함수로, 사용자가 아직 평가하지 않은 아이템 중에서 가장 높은 평점을 가진 아이템을 추천합니다.

마무리

이제, 위에서 구현한 함수들을 결합하여 간단한 추천 시스템을 구현할 수 있습니다. 이를 통해 사용자에게 각각의 아이템에 대한 추천을 할 수 있고, 평균 평점을 통해 사용자에게 유용한 아이템을 추천할 수 있습니다.

본 포스트에서는 코틀린을 사용하여 간단한 추천 시스템을 구현하는 방법에 대해 알아보았습니다. 감사합니다.

참고 자료