Benutzerdefinierte Standortbewertungen mit Places Insights erstellen

Übersicht

Ein Immobilienangebot mit einem benutzerdefinierten „Paradies für Tierbesitzer“-Wert von 9,1, der auf nahegelegenen Parks und hundefreundlichen Orten basiert.

Mit Standardstandortdaten lässt sich zwar herausfinden, was in der Nähe ist, aber oft wird die wichtigere Frage nicht beantwortet: „Wie gut ist diese Gegend für mich?“ Die Bedürfnisse Ihrer Nutzer sind vielfältig. Eine Familie mit kleinen Kindern hat andere Prioritäten als ein junger Berufstätiger mit einem Hund. Damit sie fundierte Entscheidungen treffen können, müssen Sie ihnen Statistiken zur Verfügung stellen, die diesen spezifischen Anforderungen entsprechen. Mit einem benutzerdefinierten Standort-Score können Sie diesen Wert liefern und eine deutlich differenzierte Nutzererfahrung schaffen.

In diesem Dokument wird beschrieben, wie Sie benutzerdefinierte, vielseitige Standortbewertungen mit dem Places Insights-Dataset in BigQuery erstellen. Wenn Sie POI-Daten in aussagekräftige Messwerte umwandeln, können Sie Ihre Immobilien-, Einzelhandels- oder Reiseanwendungen optimieren und Ihren Nutzern die relevanten Informationen bereitstellen, die sie benötigen. Außerdem bieten wir die Möglichkeit, die Gemini Developer API zu verwenden, um Ihre Standortbewertungen zu berechnen.

Geschäftswert mit benutzerdefinierten Messwerten steigern

In den folgenden Beispielen wird veranschaulicht, wie Sie Rohstandortdaten in aussagekräftige, nutzerorientierte Messwerte umwandeln können, um Ihre Anwendung zu optimieren.

  • Immobilienentwickler können einen „Familienfreundlichkeitsindex“ oder einen „Pendlerindex“ erstellen, um Käufern und Mietern bei der Auswahl des perfekten Viertels zu helfen, das zu ihrem Lebensstil passt. Dies führt zu einer stärkeren Nutzerinteraktion, hochwertigeren Leads und schnelleren Conversions.
  • Ingenieure aus der Reise- und Gastgewerbebranche können einen „Nightlife Score“ oder einen „Sightseer’s Paradise Score“ erstellen, um Reisenden bei der Auswahl eines Hotels zu helfen, das zu ihrem Urlaubsstil passt. So können sie die Buchungsraten und die Kundenzufriedenheit steigern.
  • Einzelhandelsanalysten können einen „Fitness- und Wellness-Score“ erstellen, um den optimalen Standort für ein neues Fitnessstudio oder ein Reformhaus zu ermitteln. Dabei werden ergänzende Unternehmen in der Nähe berücksichtigt, um das Potenzial zu maximieren, die richtige Nutzerdemografie anzusprechen.

In dieser Anleitung erfahren Sie, wie Sie mit Ortsdaten direkt in BigQuery eine flexible, dreiteilige Methode zum Erstellen beliebiger benutzerdefinierter Standortbewertungen anwenden. Wir veranschaulichen dieses Muster anhand von zwei unterschiedlichen Beispielbewertungen: einer Bewertung für Familienfreundlichkeit und einer Bewertung für Tierhalter. Mit diesem Ansatz können Sie über die Anzahl der Orte hinausgehen und die umfangreichen, detaillierten Attribute im Places Insights-Dataset nutzen. Sie können Informationen wie Öffnungszeiten, ob ein Ort für Kinder geeignet ist oder ob Hunde erlaubt sind, verwenden, um anspruchsvolle und aussagekräftige Messwerte für Ihre Nutzer zu erstellen.

Lösungsablauf

Ein dreistufiges Workflow-Diagramm: Standorte festlegen, nach Orten in der Nähe suchen und die Ergebnisse normalisieren, um eine endgültige Punktzahl zu erstellen.

In dieser Anleitung wird eine einzelne, leistungsstarke SQL-Abfrage verwendet, um eine benutzerdefinierte Punktzahl zu erstellen, die Sie an jeden Anwendungsfall anpassen können. Wir gehen diesen Prozess durch, indem wir unsere beiden Beispielbewertungen für eine hypothetische Gruppe von Wohnungsangeboten erstellen.

Vorbereitung

Folgen Sie dieser Anleitung, um Places Insights einzurichten.

1. Grundlage schaffen: Orte von Interesse

Bevor Sie Bewertungen erstellen können, benötigen Sie eine Liste der Standorte, die Sie analysieren möchten. Im ersten Schritt müssen Sie dafür sorgen, dass diese Daten als Tabelle in BigQuery vorhanden sind. Wichtig ist, dass Sie für jeden Standort einen eindeutigen Bezeichner und eine GEOGRAPHY-Spalte mit den Koordinaten haben.

Sie können eine Tabelle mit zu bewertenden Standorten mit einer Abfrage wie dieser erstellen und befüllen:

CREATE OR REPLACE TABLE `your_project.your_dataset.apartment_listings`
(
  id INT64,
  name STRING,
  location GEOGRAPHY
);

INSERT INTO `your_project.your_dataset.apartment_listings` VALUES
  (1, 'The Downtowner', ST_GEOGPOINT(-74.0077, 40.7093)),
  (2, 'Suburban Oasis', ST_GEOGPOINT(-73.9825, 40.7507)),
  (3, 'Riverside Lofts', ST_GEOGPOINT(-73.9470, 40.8079))
  -- More rows can be added here
  . . . ;

Eine SELECT * für Ihre Standortdaten würde in etwa so aussehen.

BigQuery-Abfrageergebnisse mit einer Tabelle von Wohnungsangeboten mit ID, Name und Standortkoordinaten.

2. Kernlogik entwickeln: Die Scoring-Abfrage

Nachdem Sie Ihre Standorte festgelegt haben, müssen Sie die Orte in der Nähe, die für Ihre benutzerdefinierte Punktzahl relevant sind, suchen, filtern und zählen. Das alles erfolgt in einer einzigen SELECT-Anweisung.

Mit einer raumbezogenen Suche finden, was in der Nähe ist

Zuerst müssen Sie alle Orte aus dem Places Insights-Dataset finden, die sich in einem bestimmten Umkreis Ihrer Standorte befinden. Die BigQuery-Funktion ST_DWITHIN ist dafür ideal. Wir führen einen JOIN zwischen unserer Tabelle apartment_listings und der Tabelle places_insights aus, um alle Orte im Umkreis von 800 Metern zu finden. Mit einem LEFT JOIN wird dafür gesorgt, dass alle Ihre ursprünglichen Standorte in den Ergebnissen enthalten sind, auch wenn in der Nähe keine passenden Orte gefunden werden.

Relevanz mit erweiterten Attributen filtern

Hier übersetzen Sie das abstrakte Konzept eines Scores in konkrete Datenfilter. Für unsere beiden Beispielwerte sind die Kriterien unterschiedlich:

  • Beim „Familienfreundlichkeitswert“ berücksichtigen wir Parks, Museen und Restaurants, die explizit für Kinder geeignet sind.
  • Für den „Pet-Owner Paradise Score“ berücksichtigen wir Parks, Tierarztpraxen, Tierhandlungen und alle Restaurants oder Cafés, in denen Hunde erlaubt sind.

Sie können direkt in der WHERE-Klausel Ihrer Abfrage nach diesen Attributen filtern.

Zusammenfassen der Statistiken für jeden Standort

Zählen Sie zum Schluss, wie viele relevante Orte Sie für jede Wohnung gefunden haben. Mit der GROUP BY-Klausel werden die Ergebnisse zusammengefasst und mit der COUNTIF-Funktion werden Orte gezählt, die den jeweiligen Kriterien für die einzelnen Werte entsprechen.

In der folgenden Abfrage werden diese drei Schritte kombiniert und die Rohanzahl für beide Werte in einem einzigen Durchlauf berechnet:

-- This Common Table Expression (CTE) will hold the raw counts for each score component.
WITH insight_counts AS (
  SELECT WITH AGGREGATION_THRESHOLD -- Correctly includes the mandatory aggregation threshold
    apartments.id,
    apartments.name,
    COUNTIF(places.primary_type = 'park') AS park_count,
    COUNTIF(places.primary_type = 'museum') AS museum_count,
    COUNTIF(places.primary_type = 'restaurant' AND places.good_for_children = TRUE) AS family_restaurant_count,
    COUNTIF(places.primary_type IN ('veterinary_care', 'pet_store')) AS pet_service_count,
    COUNTIF(places.allows_dogs = TRUE) AS dog_friendly_place_count
  FROM
    `your_project.your_dataset.apartment_listings` AS apartments
  LEFT JOIN
    `your-project.places_insights___us.places` AS places -- Corrected table name for the US dataset
    ON ST_DWITHIN(apartments.location, places.point, 800) -- Find places within 800 meters
  GROUP BY
    apartments.id, apartments.name
)
SELECT * FROM insight_counts;

Das Ergebnis dieser Abfrage sieht etwa so aus:

BigQuery-Ergebnisse mit den Rohzahlen für Annehmlichkeiten wie Parks, Restaurants und Dienstleistungen für Haustiere für jedes Wohnungsangebot.

Im nächsten Abschnitt werden wir auf diesen Ergebnissen aufbauen.

3. Punktzahl erstellen

Nachdem Sie die Anzahl der Orte und die Gewichtung für jeden Ortstyp für jeden Standort haben, können Sie jetzt den benutzerdefinierten Standort-Score generieren. In diesem Abschnitt werden zwei Optionen behandelt: die Verwendung einer eigenen benutzerdefinierten Berechnung in BigQuery oder die Verwendung der Gemini Developer API.

Option 1: Eigene benutzerdefinierte Berechnung in BigQuery verwenden

Die Rohdaten aus dem vorherigen Schritt sind aufschlussreich, aber ein einzelner, benutzerfreundlicher Wert ist das Ziel. Im letzten Schritt werden diese Werte mithilfe von Gewichten kombiniert und das Ergebnis wird auf eine Skala von 0 bis 1 normalisiert.

Benutzerdefinierte Gewichte anwenden: Die Auswahl der Gewichte ist sowohl eine Kunst als auch eine Wissenschaft. Sie müssen Ihre geschäftlichen Prioritäten oder das widerspiegeln, was Ihrer Meinung nach für Ihre Nutzer am wichtigsten ist. Für den „Familienfreundlichkeit“-Faktor könnten Sie festlegen, dass ein Park doppelt so wichtig ist wie ein Museum. Beginnen Sie mit Ihren besten Annahmen und passen Sie sie anhand des Nutzerfeedbacks an.

Score normalisieren: In der folgenden Abfrage werden zwei gemeinsame Tabellenausdrücke (Common Table Expressions, CTEs) verwendet. Mit dem ersten werden die Rohanzahlen wie zuvor berechnet und mit dem zweiten die gewichteten Scores. Mit der abschließenden SELECT-Anweisung wird dann eine Min-Max-Normalisierung der gewichteten Werte durchgeführt. Die Spalte location der Beispielstabelle apartment_listings wird ausgegeben, um die Datenvisualisierung auf einer Karte zu ermöglichen.

WITH
  -- CTE 1: Count nearby amenities of interest for each apartment listing.
  insight_counts AS (
    SELECT WITH AGGREGATION_THRESHOLD
      apartments.id,
      apartments.name,
      COUNTIF(places.primary_type = 'park') AS park_count,
      COUNTIF(places.primary_type = 'museum') AS museum_count,
      COUNTIF(places.primary_type = 'restaurant' AND places.good_for_children = TRUE) AS family_restaurant_count,
      COUNTIF(places.primary_type IN ('veterinary_care', 'pet_store')) AS pet_service_count,
      COUNTIF(places.allows_dogs = TRUE) AS dog_friendly_place_count
    FROM
      `your_project.your_dataset.apartment_listings` AS apartments
    LEFT JOIN
      `your-project.places_insights___us.places` AS places
      ON ST_DWITHIN(apartments.location, places.point, 800)
    GROUP BY
      apartments.id,
      apartments.name
  ),
  -- CTE 2: Apply custom weighting to the amenity counts to generate raw scores.
  raw_scores AS (
    SELECT
      id,
      name,
      (park_count * 3.0) + (museum_count * 1.5) + (family_restaurant_count * 2.5) AS family_friendliness_score,
      (park_count * 2.0) + (pet_service_count * 3.5) + (dog_friendly_place_count * 2.5) AS pet_paradise_score
    FROM
      insight_counts
  )
-- Final Step: Normalize scores to a 0-10 scale and rejoin to retrieve the location geometry.
SELECT
  raw_scores.id,
  raw_scores.name,
  apartments.location,
  raw_scores.family_friendliness_score,
  raw_scores.pet_paradise_score,
  -- Normalize Family Score using a MIN/MAX window function.
  ROUND(
    COALESCE(
      SAFE_DIVIDE(
        (raw_scores.family_friendliness_score - MIN(raw_scores.family_friendliness_score) OVER ()),
        (MAX(raw_scores.family_friendliness_score) OVER () - MIN(raw_scores.family_friendliness_score) OVER ())
      ) * 10,
      0
    ),
    2
  ) AS normalized_family_score,
  -- Normalize Pet Score using a MIN/MAX window function.
  ROUND(
    COALESCE(
      SAFE_DIVIDE(
        (raw_scores.pet_paradise_score - MIN(raw_scores.pet_paradise_score) OVER ()),
        (MAX(raw_scores.pet_paradise_score) OVER () - MIN(raw_scores.pet_paradise_score) OVER ())
      ) * 10,
      0
    ),
    2
  ) AS normalized_pet_score
FROM
  raw_scores
JOIN
  `your_project.your_dataset.apartment_listings` AS apartments
  ON raw_scores.id = apartments.id;

Die Ergebnisse der Abfrage sehen in etwa so aus: Die letzten beiden Spalten enthalten die normalisierten Werte.

Die endgültigen Abfrageergebnisse mit den gewichteten Rohwerten und den normalisierten Werten (0–10) für jedes Apartmentangebot.

Normalisierte Bewertung

Es ist wichtig zu verstehen, warum dieser letzte Normalisierungsschritt so wertvoll ist. Die gewichteten Rohwerte können je nach Bevölkerungsdichte Ihrer Standorte zwischen 0 und einer potenziell sehr großen Zahl liegen. Eine Punktzahl von 500 ist für einen Nutzer ohne Kontext bedeutungslos.

Durch die Normalisierung werden diese abstrakten Zahlen in ein relatives Ranking umgewandelt. Durch die Skalierung der Ergebnisse von 0 bis 10 wird deutlich, wie die einzelnen Standorte im Vergleich zu den anderen in Ihrem spezifischen Datensatz abschneiden:

  • Der Standort mit dem höchsten Rohwert erhält einen Wert von 10 und wird damit als beste Option im aktuellen Set gekennzeichnet.
  • Der Standort mit dem niedrigsten Rohwert erhält einen Wert von 0 und dient als Vergleichsbasis. Das bedeutet nicht, dass der Standort keine Annehmlichkeiten bietet, sondern dass er im Vergleich zu den anderen Optionen am wenigsten geeignet ist.
  • Alle anderen Werte liegen proportional dazwischen. So können Ihre Nutzer ihre Optionen auf einen Blick vergleichen.

Option 2: Gemini Developer API verwenden

Als Alternative zur Verwendung einer festen mathematischen Formel in BigQuery bietet die Gemini Developer API eine leistungsstarke Möglichkeit, differenzierte benutzerdefinierte Standortbewertungen zu berechnen.

Option 1 eignet sich hervorragend für die rein quantitative Bewertung auf Grundlage der Anzahl der Annehmlichkeiten, qualitative Daten lassen sich jedoch nicht ohne Weiteres berücksichtigen. Mit Gemini können Sie die Zahlen aus Ihrer Places Insights-Abfrage mit unstrukturierten Daten wie der Textbeschreibung des Apartmentangebots kombinieren (z.B. „Dieser Ort ist für Familien geeignet und die Gegend ist nachts ruhig“) oder bestimmte Nutzerprofil-Einstellungen (z.B. „Dieser Nutzer bucht für eine Familie und bevorzugt eine ruhige Gegend in zentraler Lage“), um eine differenziertere Punktzahl zu generieren.

Daten für Gemini vorbereiten

Wenn Sie diese Methode verwenden möchten, wandeln Sie die Ergebnisse Ihrer BigQuery-Aggregation (aus Schritt 2) in das Markdown-Format um und kombinieren Sie sie mit Ihren qualitativen Daten, z. B. einem Listing Description.

In diesem Beispiel haben wir zwei Einträge mit sehr unterschiedlichen Merkmalen. Außerdem fügen wir ein Target User Profile ein, damit Gemini weiß, für wen wir diese Ergebnisse bewerten:

## Listing 1: The Downtowner

*   **ID:** 1
*   **Amenity Counts:**
    *   Parks: 70
    *   Museums: 34
    *   Family-Friendly Restaurants: 141
*   **Listing Description:** A vibrant apartment in the heart of the city.
    Great for nightlife, but can be noisy on weekends. Close to several
    small playgrounds.
*   **Target User Profile:** Young family with a toddler, looking for a
    balance of activity and quiet.

---

## Listing 2: Suburban Oasis

*   **ID:** 2
*   **Amenity Counts:**
    *   Parks: 34
    *   Museums: 30
    *   Family-Friendly Restaurants: 318
*   **Listing Description:** Quiet, tree-lined street. Large backyard and easy
    walking distance to a major park and elementary school.
*   **Target User Profile:** Young family with a toddler, looking for a
    balance of activity and quiet.
Systemanweisungen

Gemini benötigt Systemanweisungen, um zu wissen, wie diese verschiedenen Datenpunkte gewichtet werden sollen. Sie können dem Modell explizit mitteilen, wie wichtig bestimmte Ausstattungsmerkmale sind, und es gleichzeitig anweisen, die Stimmung der Textbeschreibungen zu berücksichtigen.

You are an expert real estate analyst. Your goal is to generate a
"Family-Friendliness Score" between 0.0 and 10.0 for a list of apartment
locations.

For each location, you will be given quantitative data (amenity counts)
and qualitative data (descriptions and user profiles).

Scoring Criteria:
-   High importance: Proximity to parks and a high count of family-friendly
    restaurants.
-   Medium importance: Proximity to museums.
-   Negative modifiers: Descriptions indicating excessive noise, lack of
    safe play areas, or mismatch with the user profile.
-   Positive modifiers: Descriptions indicating quiet areas, safe streets,
    or extra space (e.g., backyards).

Analyze the provided data and generate scores based on these criteria.
Strukturierte Ausgabe

Damit die Integration von KI in Ihre Anwendung zuverlässig ist, sollten Sie sich für das Ausgabeformat nicht nur auf Prompts verlassen. Verwenden Sie stattdessen die Gemini-Funktion strukturierte Ausgabe. Wenn Sie einen responseSchema angeben, stellen Sie sicher, dass das Modell ein sauberes, parsierbares JSON-Array zurückgibt, das genau Ihren Systemanforderungen entspricht.

In unserem Beispiel können wir das folgende Schema erzwingen:

{
  "type": "ARRAY",
  "items": {
    "type": "OBJECT",
    "required": ["location_id", "name", "score", "reasoning"],
    "properties": {
      "location_id": {"type": "STRING"},
      "name": {"type": "STRING"},
      "score": {
        "type": "NUMBER"
      },
      "reasoning": {
        "type": "STRING"
      }
    }
  }
}
Beispielausgabe

Wenn Sie den Prompt mit dem definierten responseSchema senden, gibt Gemini ein strukturiertes JSON-Array zurück, das direkt von Ihrer Anwendung verwendet werden kann.

Beachten Sie in der Ausgabe, wie Gemini die Kompromisse berücksichtigt. „The Downtowner“ hat eine unglaublich hohe Parkanzahl, aber Gemini identifiziert die Beschreibung „an Wochenenden laut“ als großen Nachteil für ein Kleinkind. „Suburban Oasis“ (Vorstadtoase) erzielt dagegen eine fast perfekte Punktzahl, da hier eine hohe Dichte an Annehmlichkeiten mit passenden qualitativen Merkmalen wie „ruhige, von Bäumen gesäumte Straße“ kombiniert wird.

[
  {
    "id": 1,
    "location_name": "The Downtowner",
    "analysis_notes": "Excellent amenity counts (parks, restaurants, museums), fulfilling
    quantitative metrics. However, the qualitative data indicates excessive weekend
    noise and a strong nightlife focus, conflicting directly with the target
    user's need for quiet and suitability for a toddler. This mismatch
    significantly lowers the final score.",
    "family_friendliness_score": 5.5
  },
  {
    "id": 2,
    "location_name": "Suburban Oasis",
    "analysis_notes": "Outstanding quantitative data, especially the very high count of
    family-friendly restaurants. The qualitative description (quiet, tree-lined street,
    large backyard, proximity to elementary school and major park) aligns perfectly with
    and exceeds the needs of the target family profile. High positive modifiers
    result in a near-perfect score.",
    "family_friendliness_score": 9.8
  }
]

Mit dieser Methode können Sie sehr personalisierte Bewertungen liefern, die verständlich und auf jeden einzelnen Nutzer zugeschnitten sind.

4. Ergebnisse auf einer Karte visualisieren

BigQuery Studio enthält eine integrierte Kartenvisualisierung für jedes Abfrageergebnis, das eine GEOGRAPHY-Spalte enthält. Da in unserer Abfrage die Spalte location ausgegeben wird, können Sie Ihre Werte sofort visualisieren.

Wenn Sie auf den Tab Visualization klicken, wird die Karte aufgerufen. Mit dem Drop-down-Menü Data Column können Sie die zu visualisierende Standortbewertung auswählen. In diesem Beispiel wird die normalized_pet_score anhand von Option 1 visualisiert. Beachten Sie, dass der Tabelle apartment_listings in diesem Beispiel weitere Standorte hinzugefügt wurden.

Eine Karte, auf der die normalisierte Punktzahl für Haustiere für verschiedene Standorte visualisiert wird. Dunklere grüne Punkte stehen für höhere, günstigere Werte.

Durch die Visualisierung der Daten lassen sich die am besten geeigneten Standorte für den erstellten Wert auf einen Blick erkennen. Dunkelgrüne Kreise stehen in diesem Fall für Standorte mit einem höheren normalized_pet_score. Weitere Optionen zur Visualisierung von Places Insights-Daten finden Sie unter Abfrageergebnisse visualisieren.

Fazit

Sie verfügen jetzt über eine leistungsstarke und wiederholbare Methode zum Erstellen differenzierter Standortbewertungen. Ausgehend von Ihren Standorten haben Sie in BigQuery eine einzelne SQL-Abfrage erstellt, mit der Sie nahegelegene Orte mit ST_DWITHIN finden, sie nach erweiterten Attributen wie good_for_children und allows_dogs filtern und die Ergebnisse mit COUNTIF zusammenfassen. Durch die Anwendung benutzerdefinierter Gewichtungen und die Normalisierung des Ergebnisses haben Sie einen einzelnen, nutzerfreundlichen Wert erhalten, der tiefgreifende, umsetzbare Informationen liefert. Sie können dieses Muster direkt anwenden, um Rohstandortdaten in einen erheblichen Wettbewerbsvorteil zu verwandeln.

Nächste Aktionen

Jetzt sind Sie an der Reihe. In dieser Anleitung wird eine Vorlage bereitgestellt. Mit den umfangreichen Daten, die im Places Insights-Schema verfügbar sind, können Sie die für Ihren Anwendungsfall wichtigsten Werte erstellen. Hier sind einige weitere Scores, die Sie erstellen könnten:

  • „Nightlife Score“: Kombinieren Sie Filter für primary_type (bar, night_club), price_level und Öffnungszeiten bis spät in die Nacht, um die lebendigsten Gegenden nach Einbruch der Dunkelheit zu finden.
  • Fitness- und Wellness-Score: Zählen Sie nahegelegene gyms, parks und health_food_stores und filtern Sie Restaurants nach solchen mit serves_vegetarian_food, um Standorte für gesundheitsbewusste Nutzer zu bewerten.
  • „Pendlerfreundlichkeit“: Hier finden Sie Orte mit einer hohen Dichte an transit_station- und parking-Orten in der Nähe, um Nutzern zu helfen, die Wert auf eine gute Verkehrsanbindung legen.

Beitragende

Henrik Valve | DevX Engineer