Wyniki niestandardowych lokalizacji w przypadku danych zbiorczych o miejscach

Cel

obraz

Znalezienie idealnego miejsca, niezależnie od tego, czy jest to hotel na nadchodzące wakacje, czy apartament dla całej rodziny, często wiąże się z frustrującym i czasochłonnym procesem porównywania wielu opcji. Co by było, gdyby można było ułatwić to użytkownikom, udostępniając niestandardowe dane, które pokazują, czy hotel jest odpowiedni dla turystów, lub oceniają apartamenty pod kątem ich przyjazności dla rodzin, dzięki czemu żmudne zadanie zamienia się w łatwą decyzję?

Z tego dokumentu dowiesz się, jak używać interfejsu Places Aggregate API do generowania dynamicznych, niestandardowych ocen lokalizacji na podstawie gęstości miejsc na określonym obszarze geograficznym. Wynik, czyli numeryczny ranking oparty na określonych przez Ciebie kryteriach, natychmiast poinformuje, jak dobrze lokalizacja odpowiada ich potrzebom.

Wyobraź sobie, że promujesz hotele w mieście i chcesz wyróżnić te, które znajdują się w najbardziej atrakcyjnych turystycznie obszarach, tworząc wynik atrakcyjności dla turystów. Użyj interfejsu Places Aggregate API, aby policzyć, ile odpowiednich typów miejsc znajduje się w pobliżu każdego hotelu. Na przykład wiesz, że Twoi klienci cenią hotele w lokalizacjach, które znajdują się w pobliżu:

  • Restauracje i kawiarnie
  • Parki i muzea
  • Sklepy odzieżowe

Stosując wagi ważności do liczby wybranych typów miejsc, możesz obliczyć ogólny wynik dla każdej lokalizacji hotelu. Ocena odzwierciedla ogólną przydatność lokalizacji na podstawie miejsc w pobliżu. Wagi przypisane do poszczególnych typów miejsc powinny być zgodne z konkretnym przypadkiem użycia i tym, co jest ważne dla docelowych odbiorców. W tym dokumencie jako główny przykład wykorzystamy wynik odpowiedni dla turystów, ale możesz utworzyć wynik, który będzie odzwierciedlał dane demograficzne i potrzeby Twoich użytkowników.

Wymagania wstępne

Zanim przeczytasz ten dokument, zapoznaj się z tymi materiałami:

Wybierz odpowiednie typy miejsc

Pierwszym krokiem do utworzenia niestandardowej oceny lokalizacji jest wybranie z tabeli A typów miejsc, które są istotne dla Twoich klientów. Ponieważ tworzymy ocenę dobra dla turystów, wybraliśmy te typy miejsc, w których pobliżu turyści chcą się zatrzymać podczas pobytu:

  • restauracja
  • park
  • clothing_store
  • muzeum
  • coffee_shop

Następnie przypisz wagę do każdego z tych typów miejsc, odzwierciedlając jego względne znaczenie w ostatecznym wyniku. Wagi powinny być określane na podstawie tego, co jest najważniejsze w Twoim przypadku użycia i jakie są preferencje użytkownika. W tym przykładzie skala wag będzie wynosić od 0 do 1:

Typ miejsca

Przypisywanie wagi

restauracja

0,8

park

0,6

clothing_store

0,3

muzeum

0,2

coffee_shop

0,5

Wywoływanie interfejsu Places Aggregate API

Gdy masz już listę typów miejsc, które Cię interesują, następnym krokiem jest wywołanie interfejsu Places Aggregate API.

Interfejs Places Aggregate API wymaga filtra lokalizacji. W tym przykładzie użyj circle, gdzie środek latLng to lokalizacja hotelu, a radius wynosi 500 m. Ustaw też parametr ratingFilter, aby zwracać miejsca z oceną od 3,8 do 5, wykluczając z liczby miejsca z niższą oceną.

Eksperymentuj z różnymi ustawieniami filtra lokalizacji w konkretnym przypadku użycia. Możesz na przykład zwiększyć wartość promienia, aby uwzględnić miejsca w większej odległości od środkowej szerokości i długości geograficznej. Możesz też użyć innej metody, aby ustawić obszar wyszukiwania, np. Region lub Obszar niestandardowy.

Zapoznaj się z sekcją dotyczącą filtra lokalizacji w dokumentacji API Places Aggregate, aby dowiedzieć się, jakie masz opcje.

Wywołaj interfejs Places Aggregate API dla każdego typu miejsca i lokalizacji, dla których chcesz wygenerować niestandardową ocenę. Na przykład wywołaj typ miejsca restauracja dla jednego z hoteli:

curl --location 'https://areainsights.googleapis.com/v1:computeInsights' \
--header 'X-Goog-Api-Key: API_KEY \
--header 'Content-Type: application/json' \
--data '{
    "insights": [
        "INSIGHT_COUNT"
    ],
    "filter": {
        "locationFilter": {
            "circle": {
                "latLng": {
                    "latitude": 51.51611,
                    "longitude": -0.12726
                },
                "radius": 500
            }
        },
        "typeFilter": {
            "includedTypes": [
                "restaurant"
            ]
        },
        "ratingFilter": {
            "minRating": 3.8,
            "maxRating": 5
        }
    }
}'

Po zakończeniu wszystkich wywołań interfejsu API otrzymasz dane, które dla każdej lokalizacji wyglądają tak:

Typ miejsca

Przypisywanie wagi

Liczba

restauracja

0,8

56

park

0,6

3

clothing_store

0,3

32

muzeum

0,2

8

coffee_shop

0,5

41

Generowanie niestandardowego wyniku lokalizacji

Teraz masz liczbę miejsc i wagę każdego typu miejsca dla każdej lokalizacji, więc możesz wygenerować niestandardowy wynik lokalizacji. W tej sekcji omówimy 2 opcje: użycie algorytmu lokalnego lub interfejsu Gemini Developer API.

Opcja 1. Użyj algorytmu

Pierwsza opcja, którą omówimy, to użycie lokalnego algorytmu do wygenerowania wyniku na podstawie wag i liczb dla każdego typu miejsca. Znormalizuj ten wynik do skali od 0 do 5, gdzie wyższe wartości oznaczają bardziej atrakcyjny obszar na podstawie Twoich kryteriów. W tym przykładzie wygeneruj 2 obiekty w JavaScripcie na podstawie powyższych danych:

itemCounts

typeWeights

    {
      "restaurant": 56,
      "park": 3,
      "clothing_store": 32,
      "museum": 8,
      "coffee_shop": 41
    }
    
    {
      "restaurant": 0.8,
      "park": 0.6,
      "clothing_store": 0.3,
      "museum": 0.2,
      "coffee_shop": 0.5
    }
    

Wygeneruj wynik na podstawie liczby i wag, mnożąc itemCounts przez typeWeights i dodając wyniki do ogólnego weightedCount:

let weightedCount = 0;
for (const itemType in itemCounts) {
  weightedCount += itemCounts[itemType] * typeWeights[itemType];
}
weightedCount = weightedCount.toFixed(2);

W tym przykładzie wynik tego kroku to 78, 3.

Teraz możesz użyć normalizacji logarytmicznej, aby wygenerować ostateczną ocenę tej lokalizacji w skali od 0 do 5:

if (weightedCount === 0) {
   normalizedScore = 0;
} else {
   normalizedScore = Math.log(weightedCount + 1);
}

// Clamp between 0 and 5
normalizedScore = Math.max(0, Math.min(5, normalizedScore));

W tym przykładzie ostateczny wynik to 4, 36 (zaokrąglony do 2 miejsc po przecinku).

Opcja 2. Użyj interfejsu Gemini Developer API

Zamiast algorytmu lokalnego możesz użyć Gemini Developer API, który umożliwia obliczanie niestandardowej oceny lokalizacji dla wszystkich lokalizacji. Wystarczy, że podasz liczbę i dane dotyczące wag wraz z instrukcjami systemowymi dla wszystkich lokalizacji hoteli.

Ta metoda jest szczególnie przydatna, jeśli chcesz uwzględnić w obliczeniach szczegółowe informacje, takie jak:

  • Opisy tekstowe każdej lokalizacji hotelu, np. „Ta lokalizacja jest odpowiednia dla rodzin, a okolica jest cicha w nocy”.
  • Informacje o użytkowniku, takie jak: „Ten użytkownik dokonuje rezerwacji dla rodziny i preferuje spokojną okolicę w centralnej lokalizacji”.

Interfejs Gemini Developer API może zrozumieć i uwzględnić te dane jakościowe, co pozwala uzyskać bardziej zaawansowany i trafny wynik, który wykracza poza czysto matematyczne podejście.

Korzystając z Gemini Developer API, oprócz tabeli z typami miejsc i wagami możesz mieć dane opisu dla każdej lokalizacji, które wyglądają tak:

Lokalizacja

Opis

51.49884, -0.17978

Centralna lokalizacja w pobliżu muzeów, cicha okolica w nocy, odpowiednia dla rodzin.

51.51750, -0.13065

Centralna lokalizacja w pobliżu barów i restauracji. Głośno i tłoczno wieczorami, dobre miejsce dla grup.

51.45712, 0.01146

Lokalizacja w dzielnicy mieszkalnej, daleko od centrum miasta.

51.51271, -0.09933

Centralna lokalizacja blisko rzeki, cicha nocą i odpowiednia dla rodzin.

51.58502, -0.06445

Lokalizacja w dzielnicy mieszkalnej, daleko od centrum miasta.

Te opisy jakościowe wraz z informacjami o użytkowniku lub jego preferencjami można uwzględnić w prompcie dla Gemini.

Instrukcje systemowe

Gemini potrzebuje instrukcji i nieprzetworzonych danych, aby wiedzieć, że ma wygenerować ocenę dla każdej lokalizacji na podstawie podanych punktów danych. Przykładowa instrukcja systemowa, która pozwala to osiągnąć, może wyglądać tak:

You will be given a json file containing details about a number of locations grouped by their latitude and longitudes.

Within the location details is information about the count of places nearby the location that match a specific category, and the weighting of importance of that category, between 0 - 1.

You will also be given information about the user's preference, and a description of each location. Take this into consideration when generating scores.

Generate a location suitability score taking these into account for each location. The score should be between 1 - 5 inclusive, to two decimal places. The minimum score a location can receive is 1.

Output in JSON

Powyższe instrukcje systemowe informują Gemini, jakich danych może się spodziewać i jakie są oczekiwane dane wyjściowe modelu AI. Żądają też danych wyjściowych w formacie JSON.

Uporządkowane dane wyjściowe

Chociaż poprosiliśmy Gemini o zwrócenie wyniku w formacie JSON, musimy dokładniej określić strukturę danych wyjściowych, aby wiedzieć, czego się spodziewać, gdy wyślemy zapytanie za pomocą kodu. W tym celu możemy dodać do żądania dodatkową instrukcję ustrukturyzowanych danych wyjściowych, używając pola responseSchema w interfejsie Gemini API. Używa on obiektu schematu OpenAPI, aby ograniczyć dane wyjściowe modelu.

Na przykład:

{
  "type": "array",
  "description": "Array of location data with score",
  "items": {
    "type": "object",
    "properties": {
      "location": {
        "type": "object",
        "description": "Geographical coordinates of the location",
        "properties": {
          "latitude": {
            "type": "number",
            "format": "float",
            "description": "Latitude of the location"
          },
          "longitude": {
            "type": "number",
            "format": "float",
            "description": "Longitude of the location"
          }
        },
        "required": [
          "latitude",
          "longitude"
        ]
      },
      "score": {
        "type": "string",
        "description": "A score associated with the location"
      }
    },
    "required": [
      "location",
      "score"
    ]
  }
}

W tym przykładzie prosimy Gemini o wygenerowanie tablicy w Javascripcie zawierającej:

  • Szerokość i długość geograficzna lokalizacji
  • Wynik niestandardowej lokalizacji

Przy użyciu powyższych instrukcji systemowych i ustrukturyzowanych danych wyjściowych odpowiedź Gemini dla jednej lokalizacji będzie wyglądać tak, gdzie score to niestandardowa ocena lokalizacji:

[
  {
    "location": {
      "latitude": 51.51611,
      "longitude": -0.12726
    },
    "score": "4.13"
  }
]

Wyświetl wynik

Po wygenerowaniu niestandardowej oceny lokalizacji dla każdej lokalizacji za pomocą jednej z opisanych metod możesz ją wyświetlić obok szczegółów hotelu lub użyć jako opcji filtrowania wyszukiwania. Na przykład „pokaż mi miejsca z wysoką oceną atrakcyjności dla turystów”. Dzięki temu klienci będą mogli podejmować decyzje o rezerwacji na podstawie danych.

Podsumowanie

Korzystanie z niestandardowych ocen lokalizacji może być skutecznym narzędziem, które pozwala użytkownikom szybko ocenić, czy dany obszar jest odpowiedni. W tym dokumencie pokazaliśmy, jak wygenerować niestandardowe oceny lokalizacji dla różnych lokalizacji przy użyciu 5 osobnych typów miejsc. Tę implementację można zmodyfikować, aby dostosować ją do swoich potrzeb. Podobne typy miejsc można połączyć w jedno żądanie, aby uzyskać ich zagregowaną liczbę i przekazać ją do niestandardowego rozwiązania do oceny lokalizacji.

Wypróbuj Places Aggregate API już dziś, aby generować przydatne oceny lokalizacji i pomagać klientom w podejmowaniu świadomych decyzji dotyczących lokalizacji.

Współtwórcy

Henrik Valve | inżynier DevX