I propose an approach which only recurs to a geometry generator and a custom function.
Firstly, go to Layer Properties | Style and then choose the Single symbol renderer.
From the Symbol selector dialog, choose a Geometry generator as symbol layer type and Polygon / MultiPolygon as geometry type. Then, click on the Function Editor tab:

Then, click on New file and type buff_numb as the name of the new function:

You will see that a new function has been created and it is listed on the left side of the dialog. Now, click on the name of the function and replace the default @qgsfunction with the following code (don't delete the libraries imported by default):
@qgsfunction(args='auto', group='Custom')
def buff_numb(layer_name, curr_feat, feature, parent):
layer = QgsMapLayerRegistry.instance().mapLayersByName(layer_name)[0]
index = QgsSpatialIndex()
for ft in layer.getFeatures():
index.insertFeature(ft)
tmp_geom = curr_feat.geometry()
idsList = index.intersects(tmp_geom.boundingBox())
return len(idsList)
Once you have done this, click on the Load button and you will be able to see the function from the Custom Menu of the Expression dialog.
Now, type this expression (see the image below as a reference):
buffer(
$geometry,
0.04 * buff_numb(@layer_name, $currentfeature)
)

You have just run a function which is saying, in an imaginary way:
"For the current layer (@layer_name) and the current feature ($currentfeature), display its geometry using a buffer having a radius of 0.04 decimal degrees times the number of occurrences."
The only thing you need to change is the value of the radius: I expressed it in decimal degrees since you wrote about lat/lon, so I assumed you were using a Geographic Reference System (if not, this is not a problem and you can set any value you want). Therefore, leave the other function parameters as provided.
Finally, click on the Apply button for applying the changes.
You will see something like this:
